2016-11-28 10 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

예, 충분합니다. 왜냐하면 나에 따르면 변수는이 코드 부분을 관찰함으로써 싱글 톤이 아니기 때문입니다. 그리고 주된 문제는 non-singleton 변수 때문일 것입니다. –

답변

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

사용은 답변 내 지원이 링크 https://developer.android.com/guide/components/activities.html#SavingActivityState super.onPause();

검사를 호출하기 전에 모든 요청을 취소 할 수 있습니다.

+0

나는 이것을 시험했으나 행운이 없었습니다. 내 요청이 올바르게 취소되면 onStart가 호출 될 때 문제가 다시 시도됩니다. –

+0

오, 나는 그것을 잘못 읽었다. 나는 그것이 취소되지 않는다고 생각했다. 이전 요청을'onSaveInstanceState()'에 저장하고'onRestoreInstanceState()'에서 그 요청을 검색해야합니다. –

0

cancelAll() 모든 태그를 통과하지 못한 f를 모든 요청

취소라는 태그 feed_request

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

모든 요청을 취소합니다 다음 단일 요청

취소 메소드에서 요청 큐의 요청을 취소합니다.

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

은 참조 : https://www.androidhive.info/2014/05/android-working-with-volley-library-1/