2016-11-28 89 views
0

我使用單身RequestQueue排隊排球請求。我在我的活動的onStop中添加了一個取消方法,它會停止請求。但是,當我將已取消的請求添加到隊列中重試時,它不起作用。下面是代碼:排球重啓取消請求

我的活動類:

public class MainActivity extends Activity { 
    private int requestId; 
    protected Request previousRequest; 
    private RequestQueueSingleton requestQueueSingleton; 

    @Override 
    public void onStart() { 
     super.onStart(); 

     if(previousRequest != null && previousRequest.isCancelled) { 
      requestQueueSingleton.add(previousRequest); 
     } 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 

     requestQueueSingleton.cancelRequests(requestId); 
    } 
} 

申請單:

public class RequestQueueSingleton { 

    private static RequestQueueSingleton instance; 

    private RequestQueue requestQueue; 

    public static RequestQueueSingleton getInstance(Context context) { 
     if (instance == null) { 
      instance = new RequestQueueSingleton(context); 
     } 

     return instance; 
    } 

    private RequestQueueSingleton(Context context) { 
     if (requestQueue == null) { 
      requestQueue = Volley.newRequestQueue(context.getApplicationContext()); 
     } 
    } 

    public void addToQueue(Request request) { 
     requestQueue.add(request); 
    } 

    public void cancelRequests(int tag) { 
     requestQueue.cancelAll(tag); 
    } 

} 

注意,一切都開展相應的工作,不會出現崩潰。只是當應用程序轉到後臺並返回時,響應不會傳送。有什麼我失蹤?

在此先感謝。

+0

你怎麼做'RequestQueueSingleton'單身?通常,我讓我的單身'靜態',我從來沒有見過沒有'靜態'的任何單身。 –

+0

這實際上是活動課。我有一個不同班級的單身人士。 –

+0

是的,那就夠了。因爲根據我的觀察這部分代碼,你的變量不是單例。主要問題將是因爲非單身變量 –

回答

0
@Override 
    public void onPause() { 
     RequestQueueSingleton.getInstance(context).cancelRequests(requestId); 
     super.onPause(); 
    } 

使用電話super.onPause();

檢查此鏈接https://developer.android.com/guide/components/activities.html#SavingActivityState 對我的支持答案之前取消所有請求。

+0

我試過這個,但沒有運氣。我的請求被正確取消,問題在調用onStart時重試。 –

+0

哦,我看錯了。我認爲這不是取消。你需要在'onSaveInstanceState()'中保存先前的請求,並在'onRestoreInstanceState()'中檢索該請求' –

0

取消單個請求

下面將取消所有與名爲feed_request

String tag_json_arry = "json_req"; 
ApplicationController.getInstance().getRequestQueue().cancelAll("feed_request"); 

標籤要求取消所有請求

F你沒有任何標記傳遞給cancelAll()方法,它將取消請求隊列中的請求。

ApplicationController.getInstance().getRequestQueue().cancelAll(); 

參考:https://www.androidhive.info/2014/05/android-working-with-volley-library-1/