1

我想通过名为 LOAD MORE 的按钮在循环触发器中一次又一次地运行名为 loadMore 的 AsyncTask。

错误:

03-07 20:31:38.330: E/AndroidRuntime(504): java.lang.IllegalStateException: 无法执行任务:任务已经执行(一个任务只能执行一次

试过了

  • 按钮 LOADMORE 仅在onPostExecute()loadMore - AsyncTask 执行时可见。在里面添加 LOADMORE 视图onPostExecute()
  • AsyncTask 的假定行为不会通过 LOADMORE 按钮出现。
  • 检查 AysncTask - loadMore RUNNING 与否?LOADMORE 按钮内部onClickListener
  • 但作为记录信息,它永远不会到达onClickListenerLOADMORE 按钮。

LOADMORE 按钮的 onClickListener 代码::

 ld. . . . . .loadMore AsyncTask.
 ll. . . . . . LinearLayout (where I'm removing and Adding LOADMORE button).
 loadMore. . . LOADMORE Button.

public void onClick(View v) {
        // TODO Auto-generated method stub
        ll.removeView(loadMore);
        //loadMore.setVisibility(View.INVISIBLE);
        spin2.setVisibility(View.VISIBLE);
        if(ld.getStatus()==Status.PENDING)
        {
            ld.execute();
            Log.i("PENDING", "Not yet RUNNING");
        }
        else if(true)
        {
            while(ld.getStatus()==Status.RUNNING)
            {
                Log.i("loadMore Async", "LoadMore RUNNING");
                if(ld.getStatus()==Status.FINISHED)
                    return;
            }
            ld.execute();
        }

    }

loadMore AsyncTask 的 onPostExecute()::

protected void onPostExecute(Void result) {
adapter = new PhotosAdapter(MainActivity.this, arrPhotos);
        gridOfPhotos.setAdapter(adapter);

        spin2.setVisibility(View.GONE);

        ll.addView(loadMore);
        Log.i("loadMore-Async", "Adding LoadMore button again");
        Log.i("loadMore-Async", "LoadMore AsyncTask onPost() finished");
        loadMore.setOnClickListener(n);
        Log.i("loadMore-Async", "Adding Listener to LoadMore");
    }
4

2 回答 2

0

您不能两次执行 AsyncTask。引用文档“任务只能执行一次(如果尝试第二次执行将引发异常。)”,链接http://developer.android.com/reference/android/os/AsyncTask.html

除了创建一个新任务并执行它之外,没有其他选择。

于 2013-03-07T15:43:35.110 回答
0

通过实现

  • 创建一个将动态实例化的新 AsyncTask。
  • 循环创建新的 AysncTask 是通过创建我的 loadMore AsyncTask 的数组来解决的。

代码::

loadMorePhotos[] lmd=new loadMorePhotos[1000];

LOADMORE 按钮的 onClickListener::

    View.OnClickListener n=new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        ll.removeView(loadMore);
        //loadMore.setVisibility(View.INVISIBLE);
        spin2.setVisibility(View.VISIBLE);
        if(ld.getStatus()==Status.PENDING)
        {
            ld.execute();
            Log.i("loadMoreAsync", "new AsyncTask : 0");
            Log.i("PENDING", "Not yet RUNNING");
        }
        else if(true)
        {
             Log.i("loadMoreAsync", "Creating new AsyncTask");
             lmd[j]=new loadMorePhotos();
             lmd[j].execute();
             Log.i("loadMoreAsync", "Creating LoadMore AsyncTask :"+j);
             j++;

        }

    }
};
于 2013-03-07T17:36:35.613 回答