【发布时间】:2018-09-22 16:40:06
【问题描述】:
当单击刷新按钮时,以下订阅根本不起作用。没有打印的 Logs 表明是否调用了任何 API。
-注意: 使用 dagger2 完成所有依赖项,并像这样创建 Retrofit 实例:
@AppScope
@Provides
public Retrofit retrofit(OkHttpClient okHttpClient) {
return new Retrofit.Builder()
.client(okHttpClient)
.baseUrl("https://~~~~~~~~~~")
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
- Dagger 编译成功。
[-]在演示者中..
private final CompositeSubscription compositeSubscription = new CompositeSubscription();
...
//inside onCreate{}
compositeSubscription.add(observeRefresh());
//inside onDestroy{}
compositeSubscription.clear();
// *这里是我认为问题所在的部分。
private Subscription observeRefresh() {
return view.observeBtnRefresh()
.doOnNext(__ -> view.showLoading())
.observeOn(Schedulers.io())
.switchMap(__ -> model.getFoodsResponse())// [-] In model below...
.observeOn(AndroidSchedulers.mainThread())
// .doOnNext(model::saveFoodsState)
.doOnEach(__ -> view.hideLoading())
.retry()
.subscribe();
}
[-] 在视图中...
@BindView(R.id.btnRefresh)
ImageButton btnRefresh;// ButterKnife.bind(this); is Done.
..
public Observable<Void> observeBtnRefresh() {
return RxView.clicks(btnRefresh);
}
[-]在模型中
@Inject
FoodsNetwork foodsNetwork;
public Observable<Response<ResponseBody>> getFoodsResponse() {
return foodsNetwork.getFoodsResponse();
}
[-] foodsNetwork ...
public interface FoodsNetwork {
@GET()
Observable<Response<ResponseBody>> getFoodsResponse();
}
感谢您以任何方式阅读!
【问题讨论】:
标签: android retrofit2 rx-java2 dagger-2 rx-android