我遇到的情况是我的Retrofit类BaseUrl需要来自Activity的Intent值。如何在Dagger2模块中处理该问题。我在DaggerAppCompatActivity中使用Dagger2(dagger:2.13)。
我尝试将数据存储在sharedpreference中,然后通过dagger 2模块用于另一个活动中,但是我认为这样无效。
答案 0 :(得分:0)
Easiest was to use ApplicationContext Getter and setters e.g.
public class MaaApplication extends DaggerApplication {
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
private String baseUrl="";
}
public class SampleActivity extends DaggerAppCompatActivity im {
@Inject
IPinPadPresenter pinPadPresenter;
private void bootStrapApplicationContext()
{
try {
MaaApplication maaApplication=(MaaApplication) getApplicationContext();
String baseUrl= getIntent().getExtras().getString(ConfigConstant.BaseURl);
maaApplication.setBaseUrl(baseUrl);
}
catch (Exception ex)
{
if(BuildConfig.DEBUG)
Timber.e(ex);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
bootStrapApplicationContext();
}
@Module
public abstract class SampleActivityModule {
@Binds
public abstract Context bindContext(Application application);
@Named("baseURL")
@Provides
static String providebaseUrlDependency(Context context,ITR itr ) {
String baseUrl = ((MaaApplication)context).getBaseUrl();
return baseUrl;
}
}
}