2016-11-18 24 views
0

我與Rxjava錯誤處理工作,錯誤句柄Rxjava:的ConnectException:連接失敗

默認RxJavaCallAdapterFactory可以處理很多錯誤,

但我仍然得到我的情況FCM服務器已經崩潰而死。

這是

/** 
* 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); 
    }; 
} 

的人誰知道如何避免這種碰撞,

或者,如果允許,可以跳過錯誤處理改造2,

請告訴我,

謝謝

p/s:我用Dagger2。

回答

1

rxJava中有方法.onErrorReturn(),可以返回空對象而不是錯誤