【问题标题】:Could you tell me what's wrong with the following Subscription example?您能告诉我以下订阅示例有什么问题吗?
【发布时间】: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


    【解决方案1】:

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

    您想在后台线程中完成工作,并在主线程中观察结果。教程见here

    【讨论】:

    • 感谢您的回答,我之前已经尝试过,但不起作用!不同之处在于,如果 obserOn() 后台线程将从它开始。但万一 subscribeOn() 将从下一个下游开始。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 1970-01-01
      • 2021-11-16
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      相关资源
      最近更新 更多