2016-11-28 56 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/