2013-03-07 50 views
1

要在循环触发通过按钮和一个名为装载更多连连实现再次运行AysncTask,一旦它完成了 - onPostExcecute()

  • 运行的AsyncTask命名loadMore。被执行的AsyncTask - 当loadMore的onPostExecute()

错误&约束

  • 的logcat :: 03-07 20:31:38.330: E/AndroidRuntime(504): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once <h2>

试图

  • 按钮LOADMORE才可见。在onPostExecute()内添加LOADMORE视图。
  • AsyncTask的假定行为不是通过LOADMORE按钮来实现的。
  • 检查是否AysncTask - loadMore RUNNING与否? LOADMORE按钮的内部onClickListener
  • 但随着日志信息它从来没有达到LOADMORE按钮onClickListener

onClickListener LOADMORE按钮)loadMore的AsyncTask的代码::

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(); 
     } 

    } 

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"); 
    } 

任何帮助,将不胜感激!!

+3

创建一个新的AsyncTask的onClickListener? – njzk2 2013-03-07 15:34:01

+0

为什么不创建服务? – Payal 2013-03-07 15:34:34

+0

@ njzk2创建一个新的loadMore AsyncTask意味着我需要再次创建它的对象? – 2013-03-07 15:35:19

回答

0

通过以下实现

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

代码::

loadMorePhotos[] lmd=new loadMorePhotos[1000]; 

LOADMORE按钮::

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++; 

     } 

    } 
}; 
0

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

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

+0

感谢您的回复。但是OP已经说过了,我正在寻找一种方法来实现它。 – 2013-03-07 17:32:13

相关问题