Java 使用dagger2超时异常改装拦截器
我有一个拦截器,当我关闭互联网时它可以正常工作,它会像预期的那样抛出异常,但是当我再次打开互联网时,问题发生了,我得到了超时异常 AppModule.javaJava 使用dagger2超时异常改装拦截器,java,android,retrofit,retrofit2,dagger-2,Java,Android,Retrofit,Retrofit2,Dagger 2,我有一个拦截器,当我关闭互联网时它可以正常工作,它会像预期的那样抛出异常,但是当我再次打开互联网时,问题发生了,我得到了超时异常 AppModule.java @Singleton @Provides Retrofit provideRetrofitInstance(RetrofitInterceptor retrofitInterceptor) { return new Retrofit.Builder() .baseUrl(Bu
@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);
}
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;
}
}
interceptor.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);
}
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;
}
}
如果只是为了连接互联网,为什么不使用广播接收器来检查状态?这对我来说似乎是一种过度的杀伤力。如果只是为了连接互联网,为什么不使用广播接收器来检查状态?对我来说,这看起来太过分了。