当前位置: 首页 > 面试题库 >

用RxJava中的可观察对象替换回调

燕扬
2023-03-14
问题内容

我使用侦听器作为回调来观察Android的异步操作,但是我认为用RxJava替换此侦听器可能很棒,我是使用此库的新手,但是我真的很喜欢它,并且我始终将其与Android项目一起使用。

这是我的重构代码:

public void getData( final OnResponseListener listener ){
   if(data!=null && !data.isEmpty()){
       listener.onSuccess();
   }
   else{
       listener.onError();
   }
}

一个简单的回调:

public interface OnResponseListener {
   public void onSuccess();
   public void onError(); 
}

和“观察者”:

object.getData( new OnResponseListener() {
    @Override
    public void onSuccess() {
       Log.w(TAG," on success");
    }

    @Override
    public void onError() {
       Log.e(TAG," on error");
    }
});

谢谢!


问题答案:

例如,您可以使用 Observable.fromCallable 来创建可观察数据。

public Observable<Data> getData(){
    return Observable.fromCallable(() -> {
        Data result = null;
        //do something, get your Data object
        return result;
    });
}

然后使用您的数据

 getData().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(data -> {
                //do something with your data
            }, error -> {
                //do something on error
            });

使用了rxjava 1.x和lambda表达式。

编辑:

如果我对您的理解很好,则您想替换该侦听器,而不是将其包装为可观察的。我添加了其他示例以参考您的评论。哦.. 如果您只希望一项,也应该使用 Single

public Single<Data> getData() {
        return Single.create(singleSubscriber -> {
            Data result = object.getData();
            if(result == null){
                singleSubscriber.onError(new Exception("no data"));
            } else {
                singleSubscriber.onSuccess(result);
            }
        });
    }

getData().subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(data -> {
                //do something with your data
            }, error -> {
                //do something on error
            });


 类似资料:
  • 问题内容: 给定汽车清单(),我可以这样做: 有没有办法我可以从一个到一个序列? 像没有参数的东西 问题答案: 您可以这样映射到: 请注意,flatMapping可能不会保留源可观察的顺序。如果订单对您很重要,请使用。

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 我面临的问题是我需要一个身份验证令牌来创建我的Retrofit服务。我目前使用可观察来获取所述令牌,导致一个相当丑陋的可观察构造: 我忍不住觉得这不是应该做的。我说得对吗?

  • 我已经开始学习RxJava和RxAndroid。我想用RxJava替换我的观察者模式。observer模式类似于Android LocationManager类,该类具有register和unregister方法。“observable”类(不意味着rx.observable)在其自己的线程(HandlerThread)中工作,并拥有监听器及其处理程序对象的映射,每个监听器都在其线程中调用(通过处

  • 假设我有一个要转换为反应流的事件发出数据源。数据源由资源(例如,定期发送更新状态的套接字)绑定,所以我希望共享对该资源的单个订阅。使用带有回放的单个observable(新订阅者可以立即获得当前值)和refCount操作符似乎非常适合这样做。例如,这是他的MyDataProvider的外观: 然而,现在假设我有另一个数据源,它需要第一个数据源的结果来计算其自身的值: 在这里,我的设置开始崩溃。第一