带有dagger2超时异常的改装拦截器

时间:2020-05-11 12:08:59

标签: java android retrofit retrofit2 dagger-2

我有一个拦截器,当我关闭互联网时,该拦截器工作正常,它会按预期方式抛出异常,但是当我再次打开互联网时,出现超时异常,就会出现问题。

AppModule.java

@Singleton
    @Provides
    Retrofit provideRetrofitInstance(RetrofitInterceptor retrofitInterceptor) {
        return new Retrofit.Builder()
                .baseUrl(BuildConfig.URL)
                .client(new OkHttpClient()
                        .newBuilder()
                        .readTimeout(30, TimeUnit.SECONDS)
                        .connectTimeout(30, TimeUnit.SECONDS)
                        .writeTimeout(30, TimeUnit.SECONDS)
                        .addInterceptor(retrofitInterceptor)
                        .build())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
    }

    @Provides
    @Singleton
    RetrofitInterceptor provideApiInterceptor(Context context) {
        return new RetrofitInterceptor(context);
    }

RetrofitInterceptor.java

public class RetrofitInterceptor implements Interceptor {

    public static final String TAG = RetrofitInterceptor.class.getSimpleName();

    private String sessionId;

    private Context context;

    @Inject
    public RetrofitInterceptor(Context context) {
        this.context = context;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        if (NetworkUtils.isNetworkConnected(context)) {
            Request request = chain.request();
            Request.Builder requestBuilder = request.newBuilder();
            if (sessionId != null) {
                requestBuilder.header("sessionId", sessionId);
            }
            Response response = chain.proceed(requestBuilder.build());
            return response;
        } else {
            throw new NoConnectivityException();
        }
    }  

    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }
}

0 个答案:

没有答案
相关问题