【发布时间】:2013-03-07 15:32:35
【问题描述】:
我想通过名为 LOAD MORE 的按钮在循环触发器中一次又一次地运行名为 loadMore 的 AsyncTask。
错误:
03-07 20:31:38.330: E/AndroidRuntime(504): java.lang.IllegalStateException: 无法执行任务:任务已经执行(一个任务只能执行一次
试过
- 按钮 LOADMORE 仅在 loadMore 的
onPostExecute()时可见 - AsyncTask 已执行。在onPostExecute()中添加 LOADMORE 视图。 - AsyncTask 的假定行为未通过 LOADMORE 按钮出现。
- 检查 AysncTask - loadMore RUNNING 与否?在 LOADMORE 按钮的
onClickListener内。 - 但作为日志信息,它永远不会到达 LOADMORE 按钮的
onClickListener。
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");
}
【问题讨论】:
-
创建一个新的 AsyncTask ?
-
为什么不创建服务??
-
@njzk2 创建一个新的 loadMore AsyncTask 意味着我需要再次创建它的 z 对象??
-
@Payal 我已经用 AsyncTask 做了很多工作,所以现在切换到
Service不是一个好选择。 -
@VikalpPatel 为您的 asynctask 创建新实例并调用 exec() 方法
标签: android multithreading android-asynctask