作者:鄢都浪子_562 | 来源:互联网 | 2023-02-05 12:41
我正在学习Android,并且正在遵循有关RxJava和Dagger2的Retrofit2的一些指南。现在,我不想处理没有互联网连接的情况。我已经找到了这个答案,这似乎很不错,但是我不知道如何应用。
我有一些NetworkModule
,与OkHttpClient
提供商。我假设我需要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();
}
这是我所没有的Context
。我应该朝哪个方向-尝试在那里获取上下文,或者可能我误解了可观察对象的概念?
1> Anton Kazako..:
您可以@Provides
在DaggerModule中使用注释来获取应用程序上下文。或者,您可以创建一个模块,该模块在其构造函数中接受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();
}
}