【问题标题】:okhttp3.Cache cannot be provided without an @Inject constructor or from an @Provides-annotated methodokhttp3.Cache 不能在没有 @Inject 构造函数或 @Provides-annotated 方法的情况下提供
【发布时间】:2018-11-16 06:20:08
【问题描述】:

我正在使用 Android Dagger2,但出现以下错误。 我的 AppModule 类是:

@Module
public class AppModule {

RetrofitExample retrofitExample;

AppModule(RetrofitExample retrofitExample) {

    this.retrofitExample = retrofitExample;

}

@Singleton
@Provides
RetrofitExample provideApplication() {
    return retrofitExample;
}
}

我的 API 模块类

@Module
class ApiModule {

String BaseUrl;

private  MainActivity  mainActivity;

ApiModule(String baseUrl) {
    this.BaseUrl = baseUrl;
}


public ApiModule(MainActivity downloadFileView) {
    this.mainActivity = downloadFileView;
}
@Provides
@Singleton
Gson provideGson() {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
    return gsonBuilder.create();
}

@Provides
@Singleton
OkHttpClient provideOkhttpClient(Cache cache) {
    OkHttpClient.Builder client = new OkHttpClient.Builder();
    client.cache(cache);
    return client.build();
}

@Singleton
@Provides
Retrofit providesRetrofit(Gson gson, OkHttpClient okHttpClient) {
    return new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create(gson))
            .baseUrl(BaseUrl)
            .client(okHttpClient)
            .build();
}

}

我的 API 组件类。

void inject(MainActivity activity);

这是我的应用程序类

private static RetrofitExample mInstance;

private ApiComponent mApiComponent;

@Override
public void onCreate() {
    super.onCreate();

    mInstance = this;

    mApiComponent = DaggerApiComponent.builder()
            .appModule(new AppModule(this))
            .apiModule(new ApiModule("https://simplifiedcoding.net/demos/"))
            .build();
}

public static synchronized RetrofitExample getInstance() { return mInstance;    }
ApiComponent getApiComponent()
{
    return mApiComponent;
}

我收到以下错误

okhttp3.Cache cannot be provided without an @Inject constructor or from an 
@Provides-annotated method.
okhttp3.Cache is injected at
net.simplifiedlearning.retrofitexample.ApiModule.provideOkhttpClient(cache)
okhttp3.OkHttpClient is injected at
net.simplifiedlearning.retrofitexample.ApiModule.providesRetrofit(…, 
okHttpClient)
retrofit2.Retrofit is injected at
net.simplifiedlearning.retrofitexample.MainActivity.retrofit
net.simplifiedlearning.retrofitexample.MainActivity is injected at
net.simplifiedlearning.retrofitexample.ApiComponent.inject(activity)

【问题讨论】:

    标签: android dependency-injection dagger-2 android-mvp


    【解决方案1】:
    okhttp3.Cache cannot be provided without an @Inject constructor or from an 
    @Provides-annotated method.
    

    你需要

    @Provides
    @Singleton
    Cache provideOkHttpCache(Application application) { 
        int cacheSize = 10 * 1024 * 1024; // 10 MiB
        Cache cache = new Cache(application.getCacheDir(), cacheSize);
        return cache;
    }
    

    在您的 ApiModule 中。在https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2查看与您类似的 NetModule

    【讨论】:

    猜你喜欢
    • 2018-06-14
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多