android-如何为Dagger2提供上下文

我正在学习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();
    }
}
上一篇:java-通过okhttp3上传文件


下一篇:从网络请求过程看OkHttp拦截器