2014-12-26 160 views
3

我的異步任務調用我活動的onCreate()方法中Android的 - 無法執行的任務:任務已經執行

my_random_task = new MyRandomTask(); 
my_random_task.setListener(this); 

final Button post_btn = (Button) findViewById(R.id.post_btn); 
post_btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     EditText post_text = (EditText) findViewById(R.id.post_text); 

     if (!post_text.isEmpty()) { 
      summoner_search_task.execute(summoner_name); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Please type a post text.", Toast.LENGTH_SHORT).show(); 
      post_text.requestFocus(); 
     } 

    } 
}); 

的的AsyncTask是空的,但是當我嘗試再次致電的AsyncTask按下按鈕,我得到

java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)

有沒有什麼辦法,使復位的AsyncTask並能夠再次運行後,我按下按鈕?

+1

你必須創建的'summoner_search_task' – TronicZomB

+0

@TronicZomB一個新的實例我如何才能做到這一點?當我單擊按鈕時創建一個新實例... – fxuser

+3

移動my_random_task = new MyRandomTask(); my_random_task.setListener(this);'onClick'方法內部。 – stkent

回答

0

我正在傳遞一個CallBackListener接口,其中包含一個回調函數,在異步任務結束時觸發。

所以我做了(感謝@TronicZomB和@stkent)爲:

final CallBackListener cbl = this; 

final Button post_btn = (Button) findViewById(R.id.post_btn); 
post_btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     EditText post_text = (EditText) findViewById(R.id.post_text); 

     if (!post_text.isEmpty()) { 
      my_random_task = new MyRandomTask(); 
      my_random_task.setListener(cbl); 
      summoner_search_task.execute(summoner_name); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Please type a post text.", Toast.LENGTH_SHORT).show(); 
      post_text.requestFocus(); 
     } 

    } 
});