Reputation: 7976
I'm working with Rxjava Error Handling,
Default RxJavaCallAdapterFactory
can handle many errors,
But I still get crash for case my FCM Server is died already.
This is
/**
* Created by Administrator on 16/09/2016.
* In Dagger 2 frameworks.
* Network Module for implement Retrofit + Gson structure
*/
@Module
public class NetworkModule {
private final String baseURL;
public NetworkModule(String baseURL) {
this.baseURL = baseURL;
}
@Singleton
@Provides
FCMApi provideFCMApi(@Named("fcm") Retrofit retrofit) {
return retrofit.create(FCMApi.class);
}
@Singleton
@Provides
@Named("fcm")
Retrofit provideFCMRetrofit(@Named("fcm") OkHttpClient okHttpClient, Context context) {
return new Retrofit.Builder()
.baseUrl(context.getString(R.string.host_fcm))
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
// TODO CRASH IN HERE, IF ENABLE, HOW TO AVOID THIS RXJAVA ERROR HANDLING WITHOUT RUNTIME WARNING
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
@Singleton
@Provides
@Named("fcm")
OkHttpClient getOkHttpClientForFCM(Context context, @Named("fcm") Interceptor interceptor) {
OkHttpClient.Builder okClientBuilder = new OkHttpClient.Builder();
okClientBuilder.addInterceptor(interceptor);
if (BuildConfig.DEBUG) {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel( HttpLoggingInterceptor.Level.BASIC);
// Can be Level.BASIC, Level.HEADERS, or Level.BODY
// See http://square.github.io/okhttp/3.x/logging-interceptor/ to see the options.
okClientBuilder.addInterceptor(httpLoggingInterceptor);
}
final File baseDir = context.getCacheDir();
if (baseDir != null) {
final File cacheDir = new File(baseDir, "HttpResponseCache");
okClientBuilder.cache(new Cache(cacheDir, 50 * 1024 * 1024));
}
return okClientBuilder.build();
}
@Singleton @Provides @Named("fcm")
Interceptor provideInterceptorForFCM(final Context context) {
return chain -> {
/**
* Add header with following attributes as agree with Web Server
* - Token
*/
Request original = chain.request();
// Add header to request
Request.Builder requestBuilder = original.newBuilder();
requestBuilder
.addHeader("X-Auth-Token", context.getString(R.string.x_auth_token))
.addHeader("X-Asukabu-Client-Device-ID", getAndroidId(context));
Request request = requestBuilder.build();
return chain.proceed(request);
};
}
People who know how to avoid this crash,
Or if enable, can skip Error Handling in Retrofit 2,
Please tell me,
Thank you,
p/s : I use Dagger2.
Upvotes: 1
Views: 726
Reputation: 3282
There is method .onErrorReturn() in rxJava, you can return empty object instead of error
Upvotes: 2