Java 多端点dagger2改造
对于我的项目,我需要使用2个不同的API端点。现在,我已经实现了dagger2代码,它只使用一个端点。有人知道吗,我如何在代码中正确地添加另一个端点 这是我的申请文件:Java 多端点dagger2改造,java,api,retrofit2,dagger-2,endpoint,Java,Api,Retrofit2,Dagger 2,Endpoint,对于我的项目,我需要使用2个不同的API端点。现在,我已经实现了dagger2代码,它只使用一个端点。有人知道吗,我如何在代码中正确地添加另一个端点 这是我的申请文件: public class TalisProjectApplication extends Application { @Inject DataManager dataManager; ApplicationComponent applicationComponent; @Override public void onCrea
public class TalisProjectApplication extends Application {
@Inject
DataManager dataManager;
ApplicationComponent applicationComponent;
@Override
public void onCreate() {
super.onCreate();
applicationComponent = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this, FirebaseService.ENDPOINT, FirebaseService.ENDPOINT_ADS))
.build();
applicationComponent.inject(this);
}
public static TalisProjectApplication get(Context context) {
return (TalisProjectApplication) context.getApplicationContext();
}
public ApplicationComponent getComponent() {
return applicationComponent;
}
}
这是我的匕首档案
@Module
public class ApplicationModule {
protected final Application application;
String baseUrl;
String baseAdsUrl;
private LoginActivity activity;
public static final String FIREBASE = "firebase";
public static final String ADS = "ads";
public ApplicationModule(Application app, @Named(FIREBASE) String url, @Named(ADS)String baseAdsUrl) {
application = app;
this.baseUrl = url;
this.baseAdsUrl = baseAdsUrl;
}
@Provides
Application provideApplication() {
return application;
}
@Provides
@ApplicationContext
Context provideContext() {
return application;
}
@Provides
@Singleton
SharedPreferences providesSharedPreferences(Application application) {
return PreferenceManager.getDefaultSharedPreferences(application);
}
@Provides
@Singleton
Cache provideHttpCache(Application application) {
int cacheSize = 10 * 1024 * 1024;
Cache cache = new Cache(application.getCacheDir(), cacheSize);
return cache;
}
@Provides
@Singleton
Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
return gsonBuilder.create();
}
@Provides
@Singleton
OkHttpClient provideOkhttpClient(Cache cache) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.addInterceptor(logging);
client.cache(cache);
return client.build();
}
@Provides
@Singleton
@Named(FIREBASE)
Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(baseUrl)
.client(okHttpClient)
.build();
}
@Provides
@Singleton
@Named(ADS)
Retrofit provideAdsRetrofit(Gson gson, OkHttpClient okHttpClient) {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(baseAdsUrl)
.client(okHttpClient)
.build();
}
@Provides
@Singleton
@Named(FIREBASE)
FirebaseService.Firebase providesTheFirebaseService(@Named(FIREBASE) Retrofit retrofit) {
return retrofit.create(FirebaseService.Firebase.class);
}
@Provides
@Singleton
@Named(ADS)
FirebaseService.Firebase providesTheAdsService(@Named(ADS) Retrofit retrofit) {
return retrofit.create(FirebaseService.Firebase.class);
}
}
这是我使用改装电话的服务文件:
public class FirebaseService {
public static final String ENDPOINT = "";
public static final String ENDPOINT_ADS = "";
private static FirebaseService.Firebase firebase;
public interface Firebase {
}
}
在我尝试实现另一个端点之后。现在出现此错误:
改装2.如果没有@Inject构造函数,则无法提供改装
或者来自@Provides注释的方法
编辑
@Singleton
public class DataManager {
private Retrofit firebaseRetrofit;
private Retrofit adsRetrofit;
private FirebaseService.Firebase firebase;
private DatabaseReference databaseRef;
private Application application;
private PreferencesHelper preferencesHelper;
String catId;
@Inject
public DataManager(@Named(FIREBASE) Retrofit firebaseRetrofit, @Named(ADS) Retrofit adsRetrofit, FirebaseService.Firebase firebase, Application application, PreferencesHelper preferencesHelper) {
this.firebaseRetrofit = firebaseRetrofit;
this.adsRetrofit = adsRetrofit;
this.firebase = firebase;
this.application = application;
this.preferencesHelper = preferencesHelper;
}
}
好吧,现在Dagger感到困惑,因为他不知道要为您的数据管理器提供什么改装
您已在模块中声明了两个名为
的改装
实例。现在,您必须指定要传递给DataManager
的改造
实例:
@Inject
public DataManager(@Named(FIREBASE) Retrofit firebaseRetrofit,
@Named(ADS) Retrofit adsRetrofit,
... ) {
...
}
在代码中显示您的@Inject
改型
实例。仅使用一个改型url,我就在数据管理器中插入了改型实例。您可以在“编辑”中看到它。我没有使用@InjectAnnotation,它在没有它的情况下工作谢谢!现在出现此错误:错误:如果没有@Provides注释方法,则无法提供my.github.tomas.talisproject.data.remote.FirebaseService.Firebase。请参见如何在模块中提供Firebase
实例。您已经用@Named(FIREBASE)
对其进行了注释,这意味着您还必须在构造函数参数中对其进行注释。azizbekian感谢您的帮助,我编辑了您在我的帖子中所说的所有内容,但仍然出现相同的错误…@LaurisMacke,我编辑了您在我的帖子中所说的所有内容
您没有。更改为@Named(FIREBASE)FirebaseService.FIREBASE FIREBASE
。
@Inject
public DataManager(@Named(FIREBASE) Retrofit firebaseRetrofit,
@Named(ADS) Retrofit adsRetrofit,
... ) {
...
}