gpt4 book ai didi

android - 如何使用 Dagger2 提供上下文

转载 作者:太空狗 更新时间:2023-10-29 16:28:59 25 4
gpt4 key购买 nike

我正在学习 Android,我正在遵循一些 Retrofit2 与 RxJava 和 Dagger2 的指南。现在我想处理没有互联网连接的情况。我找到了这个 answer , 哪一个看起来很优雅,但我不知道如何应用它。

我有一些 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。我应该朝哪个方向走 - 尝试在那里获取上下文,或者我可能误解了可观察对象的概念?

最佳答案

您可以在 DaggerModule 中使用 @Provides 注解来获取应用上下文。或者,您可以创建一个模块,该模块在其构造函数中接受 Context 参数,以防您需要 Activity 上下文。然后您可以在 Activity 中构建组件并将参数注入(inject)其中。

 @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();
}
}

关于android - 如何使用 Dagger2 提供上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com