2013-03-07 22 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

相關問題