2012-12-15 91 views
1

我使用的AsyncTask類來處理從服務器端傳來的圖像中的ImageView
顯示出來我有一個下一步按鈕在我的代碼使用下面的代碼來調用下一張圖片:
手柄的AsyncTask

private class LoadImage extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPostExecute(Void result) { 

     if (imgque != null) { 
      imgSelectedQue.setImageDrawable(imgque); 
      if (getActivity() != null) { 
       adjustResourceEnvelope(); 
      } 
     } 

    } 

    @Override 
    protected void onPreExecute() { 
     imgque = null; 
     imgSelectedQue.setImageDrawable(null); 
     imgSelectedQue.requestLayout(); 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    protected Void doInBackground(Void... params) { 
     InputStream is; 
     try { 
      is = (InputStream) new URL(Constants.PLAYER_SERVICE_BASE_URL + "/playerservice" 
        + imageurl).getContent(); 
      imgque = Drawable.createFromStream(is, null); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      imgque = null; 
      e.printStackTrace(); 
     } 

     return null; 

    } 
} 

現在的問題是,如果我點擊下一步按鈕Gz重複那麼它調用的AsyncTask,很多時候和ImageView的顯示都喜歡「幻燈片放映」的圖像,因爲所有的URL圖像在隊列中。
有什麼方法可以只顯示最後一個AsyncTask調用圖像嗎?

回答

0

我找到了解決方案。
如果有人遇到同樣的問題。
我增加了新的線路

if (loadimage != null) 
{ 
    loadimage.cancel(true); 
    loadimage = null; 
} 

loadimage.cancel(true) will stop the AsyncTask if it is already Running 

然後執行AsycTask()

loadimage = new LoadImage(); 
loadimage.execute(); 

這樣我能夠調用只剩下最後的AsyncTask什麼我需要的。

+0

效率不高,也要注意取消呼叫的行爲是不一樣的,不能保證一直成功,請自己檢查一下API。 – yorkw

+0

確定@yorkw它適用於我...如果您有任何建議,請告訴我。 – KDeogharkar

+0

常用策略是使用AsyncTask.getStatus()。當點擊按鈕時,如果有一個當前正在運行,則不要啓動另一個按鈕。 – yorkw

1

做這樣的事情:

[1]當您在NEXT按鈕disable NEXT按鈕的點擊呼叫LoadImage AsyncTask

[2]在onPreExecute()方法LoadImage AsyncTaskenable您的NEXT按鈕再次。

OR,

可以實現這樣的事情與使用簡單FLAG也。通過將其設置爲true和false。

希望這可以幫助你。

謝謝。

+0

我的客戶不想禁用下一個按鈕,因爲如果互聯網速度慢,它會讓他閒置。 – KDeogharkar

+1

然後,您應該使用設置標誌,只有在當前作業完成後才允許您添加隊列中的下一個作業。 –

+0

好吧,我會嘗試 – KDeogharkar