2016-08-03 2 views
1

나는 YouTube API를 사용하는 응용 프로그램을 만듭니다. 첫번째로 Retrofit을 사용하여 목록 비디오를로드 한 다음 Retrofit을 계속 사용하여 목록에있는 비디오의 모든 정보를로드합니다.모든 요청을 retrofit2로 취소하십시오.

listview은 새로 고침과 loadmore를 지원하기 때문에 회신 요청이 모두 cancel입니다.

나는 을 알고 있습니다.cancel() 콜을 요청하면 요청을 취소 할 수 있습니다. 모든 요청을 취소 할 수 있습니다. 을 스택에 넣고 각각 cancel()으로 전화하십시오.

더 나은 해결책이 있습니까?

+0

[http://stackoverflow.com 어떤에서 호출이 있다고 가정 /questions/34367910/retrofit-2-okhttp-cancel-all-running-requests](http://stackoverflow.com/questions/343679) 10/retrofit-2-okhttp-cancel-all-running-requests) –

+0

나는이 글을 읽는다. 하지만'retrofit.client(). cancel (...)'을 모르지만 함수를 찾을 수 없습니다. – phongvan

+0

이 스레드에 이미'dispatcher'가 사용되었습니다. 'dispatcher'에'cancelAll();'메서드가 있습니다. –

답변

3

내가

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY); 

OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

OkHttpClient client = httpClient.addInterceptor(interceptor).build(); 

Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl("MY URL") 
       .client(new OkHttpClient.Builder().addInterceptor(interceptor).build()) 
       .addConverterFactory(GsonConverterFactory.create()); 

OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

지금 Dispatcher과 서비스를 만들고 Retrofit

Dispatcher dispatcher=new Dispatcher(); 
dispatcher.setMaxRequests(totalRequest); 
httpClient.dispatcher(dispatcher); 

Retrofit retrofit = builder.client(client).build(); 
Service servicee = retrofit.create(serviceClass) 

로 설정하고 어디서

dispatcher.cancelAll(); 
+0

디스패처가 이미 게시 된 요청을 취소하고 콜백이 실행됩니다. Dispatcher OnStop()을 사용하여 요청을 취소했지만 실행중인 요청은 취소되었습니다. 그러나 느린 네트워크에서. 게시 된 요청은 여전히 ​​콜백이라고하며 예외가 발생합니다. – Killer