当单击刷新按钮时,以下订阅根本不起作用。没有打印的日志表明有任何调用的API。
-注意: 使用dagger2完成所有依赖关系,并创建Retrofit实例,如下所示:
@AppScope
@Provides
public Retrofit retrofit(OkHttpClient okHttpClient) {
return new Retrofit.Builder()
.client(okHttpClient)
.baseUrl("https://~~~~~~~~~~")
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
[-]在演示者中。.
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();
}
感谢您以任何方式阅读!
答案 0 :(得分:1)
将.observeOn(Schedulers.io())
更改为.subscribeOn(Schedulers.io())
。
您要在后台线程中进行工作,并在主线程中观察结果。有关教程,请参见here。
答案 1 :(得分:0)
我发现了问题所在,因此决定保留此问题,因为这可能会使其他开发人员去处理小事情。 API方法中遗漏了一些小东西(路径和一些@Query),这使它无法正常工作
@GET(".")
Observable<Response<ResponseBody>> getFoodsResponse(@Query String query);