【问题标题】:Using Dagger with Observables, RxJava and retrofit将 Dagger 与 Observables、RxJava 和改造一起使用
【发布时间】:2018-07-29 05:51:44
【问题描述】:
我有一个简单的代码 sn-p 如下:
- 我正在使用 Dagger 将 Retrofit 注入到活动中
- 因为 Dagger 在
OnCreate() 注入,所以工作正常
- 但是如果我使用如下 Observable 来使用 RxJava,我会崩溃,因为
调用可观察代码时不会创建改造客户端,
因为注射发生在以后
- 如何正确使用 Dagger 和 Observable
public class MainActivity extends AppCompatActivity {
@Inject
Retrofit retrofit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((ThisForThatApplication)getApplication()).getNetComponent().inject(this);
}
Observable<CategoryHomeModel[]> categoriesObservable = retrofit.
.create(Restapi.class)
.getCategories1(new GetHeaders().prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
【问题讨论】:
标签:
retrofit2
rx-java2
dagger-2
【解决方案1】:
事实证明,这很简单......注意与匕首有关:D
private Observable<CategoryHomeModel[]> getCategoriesObservable() {
Observable<CategoryHomeModel[]> categoriesObservable = retrofit
.create(Restapi.class)
.getCategories1(new GetHeaders().prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
return categoriesObservable;
}
private Observable<WalletBalance> getWalletObservable() {
Observable<WalletBalance> walletObservable = retrofit
.create(Restapi.class)
.getWalletBalance1(new GetHeaders().prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
return walletObservable;
}
private Observable<Settings> getSettingsObservable() {
Observable<Settings> settingsObservable = retrofit
.create(Restapi.class)
.getSettings1(new GetHeaders().prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
return settingsObservable;
}
private Observable<SwapSettings> getRatingsObservble() {
Observable<SwapSettings> ratingsObservable = retrofit
.create(Restapi.class)
.rateMySwap1(new GetHeaders().prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
return ratingsObservable;
}
private void executeApis() {
List<Observable<?>> observables = Lists.newArrayList(getCategoriesObservable(),
getWalletObservable(), getSettingsObservable(), getRatingsObservble());
Observable.merge(observables).toList().subscribe(new Consumer<List<Object>>() {
@Override
public void accept(List<Object> objects) throws Exception {
Timber.d("");
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Timber.d("");
}
});
}