我正在学习Android,并且正在遵循有关RxJava和Dagger2的Retrofit2的一些指南.
现在,我不想处理没有互联网连接的情况.
我找到了这个answer
似乎很优雅,但我不知道如何应用它.
我有一些带有OkHttpClient提供程序的NetworkModule.
我假设我需要使用拦截器创建OkHttpClient.Builder.所以它应该看起来像这样:
@Provides
@Singleton
OkHttpClient provideOkHttpClient(Cache cache) {
ConnectivityInterceptor ci = new ConnectivityInterceptor(networkObservable()));
OkHttpClient.Builder.addInterceptor(ci)
return builder.build();
}
private boolean networkObservable() {
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}
这没有用,因为我没有上下文.
我应该朝哪个方向-尝试在那里获取上下文,或者可能我误解了可观察对象的概念?
解决方法:
您可以在DaggerModule中使用@Provides批注来获取应用程序上下文.或者,您可以创建一个模块,该模块在其构造函数中接受Context参数,以防您需要活动上下文.然后,您可以在活动中构建组件并将参数注入其中.
@Module
public class AppModule {
private Context context;
public AppModule(@NonNull Context context) {
this.context = context;
}
@Singleton
@Provides
@NonNull
public Context provideContext(){
return context;
}
}
应用类别:
public class PFApplication extends Application {
private static AppComponent appComponent;
public static AppComponent getAppComponent() {
return appComponent;
}
@Override
public void onCreate() {
super.onCreate();
appComponent = buildComponent();
}
public AppComponent buildComponent(){
return DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
}