【问题标题】:RxAndroid issue with retrofit?RxAndroid 的改造问题?
【发布时间】:2017-03-30 18:15:00
【问题描述】:

我在 subscribe 方法中遇到了演员表问题,我不知道为什么新的 Observer 会给出这个问题。

 Observable<GradeModel> getGrade = retrofit
                .create(GradeService.class)
                .getGrade()
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .map(model -> {
                    // transform model
                    DecimalFormat grades = (DecimalFormat) model.getGrades();
                    return grades;
                })
                .subscribe(new Subscriber<DecimalFormat>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i(TAG, "onError method of observer");
                    }

                    @Override
                    public void onNext(DecimalFormat grades) {
                        mainPresenter.setListGrades(grades);
                    }
                });

必填: rx.Observable 成立: rx.订阅

【问题讨论】:

  • SafeSubscriber 实现了 Observer,而不是 Observable。这是你打算投的吗?顺便说一句,为什么要投?
  • 我是 rxJava 新手。所以我不知道 BTW 是什么意思。
  • BTW 的意思是“顺便说一句”,可能在 rxjava 之前一千年就被使用了。 ;-)
  • “那些错误不是我的”?它们是由于您从 rxjava 获取返回的对象并尝试将其转换为不是的对象。 subscribe 方法不返回任何实现 Observable 的东西。因此,虽然您可以简单地删除演员表,但您说您没有,但它显然在代码的第一行,但最好了解您要做什么。
  • 如果您只是删除了强制转换但仍将变量声明为 Observable,那么是的,您仍然遇到同样的问题 - 尝试将变量分配给不同类型的对象。铸造是一种说“嘿,我知道”这个对象实现 Observable 的方式,所以请分配它。那失败了,因为这不是真的。如果没有演员表,您是在说该对象已经隐式地是一个 Observable,这也是不正确的。将您的变量声明为订阅者或观察者。

标签: java android casting rx-java rx-android


【解决方案1】:

直到.subscribe(...) 它是一个Observable。但是订阅后它会返回一个Subscription 实例,可以用来取消订阅。

发生异常是因为您将这个Subscription 转换回Observable,尽管它们完全不相关。

在不知道你对那个变量的意图的情况下,很难说出正确的代码是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多