您能否告诉我以下订阅示例有什么问题?

时间:2018-09-22 16:40:06

标签: android retrofit2 rx-java2 dagger-2 rx-android

当单击刷新按钮时,以下订阅根本不起作用。没有打印的日志表明有任何调用的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();

}

感谢您以任何方式阅读!

2 个答案:

答案 0 :(得分:1)

.observeOn(Schedulers.io())更改为.subscribeOn(Schedulers.io())

您要在后台线程中进行工作,并在主线程中观察结果。有关教程,请参见here

答案 1 :(得分:0)

我发现了问题所在,因此决定保留此问题,因为这可能会使其他开发人员去处理小事情。 API方法中遗漏了一些小东西(路径和一些@Query),这使它无法正常工作

@GET(".")
Observable<Response<ResponseBody>> getFoodsResponse(@Query String query);