Retrofit API call receives "HTTP FAILED: java.io.IOException: Canceled"
25,222
That exception gets thrown if the request is cancelled by the user. When using RxJavaCallAdapterFactory
this happens if the subscription is unsubscribed before the call can complete. So I guess at some point after you do the call you do subscription.unsubscribe()
which cancels the underlying requests.
Author by
oleg.v
Updated on October 26, 2021Comments
-
oleg.v over 2 years
Can't figure out why is this happening. Neither one of rx callbacks (onCompleted(), onError(), onNext()) not gets triggered by my call. The only thing i receive is this okhttp output:
D/OkHttp: --> GET https://api.privatbank.ua/p24api/exchange_rates?json=true&date=20.11.2016 http/1.1 D/OkHttp: --> END GET D/OkHttp: <-- HTTP FAILED: java.io.IOException: Canceled
Retrofit module:
@Module public class RestModule { @Provides @Singleton public HttpLoggingInterceptor providesHttpLogginInterceptor() { return new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY); } @Provides @Singleton public OkHttpClient providesOkHttpClient(@NonNull HttpLoggingInterceptor loggingInterceptor) { return new OkHttpClient.Builder() .addInterceptor(loggingInterceptor) .connectTimeout(ConstantsManager.CONNECTION_TIME_OUT, TimeUnit.SECONDS) .readTimeout(ConstantsManager.READ_TIME_OUT, TimeUnit.SECONDS) .build(); } @Provides @Singleton public Gson providesGson() { return new GsonBuilder().create(); } @Provides @Singleton public Retrofit providesRetrofit(@NonNull OkHttpClient okHttpClient, @NonNull Gson gson) { return new Retrofit.Builder() .baseUrl(ConstantsManager.BASE_URL) .client(okHttpClient) .addConverterFactory(SimpleXmlConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gson)) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); } @Provides @Singleton public PrivatbankApi providesPrivatbankApi(@NonNull Retrofit retrofit) { return retrofit.create(PrivatbankApi.class); } }
API interface:
public interface PrivatbankApi { @GET Observable<CurrentRates> loadCurrentRates(@NonNull @Url String url); @GET("exchange_rates") Observable<DateRates> loadDateRates(@NonNull @Query("json") Boolean json, @NonNull @Query("date") String date); }
Subscription:
subscription = dataManager.loadDateRates(date) .subscribeOn(Schedulers.io()) .doAfterTerminate(() -> { }) .subscribe(dateRates -> { // My code here... }, throwable -> { Timber.e(throwable, "Error while loading data occurred!"); });
By the way, both of the calls gets the same error:
D/OkHttp: --> GET https://privat24.privatbank.ua/p24/accountorder?oper=prp&PUREXML&apicour&country=ua http/1.1 D/OkHttp: --> END GET D/OkHttp: <-- HTTP FAILED: java.io.IOException: Canceled D/OkHttp: --> GET https://api.privatbank.ua/p24api/exchange_rates?json=true&date=20.11.2016 http/1.1 D/OkHttp: --> END GET D/OkHttp: <-- HTTP FAILED: java.io.IOException: Canceled