问题描述
我使用侦听器作为回调来观察Android的异步操作,但我认为用RxJava替换这个侦听器可能会很棒,我很喜欢使用这个库但我真的很喜欢它而且我总是在Android项目中使用它。
Im using listeners as callbacks to observe asynchronous operations with Android, but I think that could be great replacing this listeners with RxJava, Im new using this library but I really like it and Im always using it with Android projects.
这是我的重构代码:
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 来创建包含数据的observable。
For example you can use Observable.fromCallable to create observable with your data.
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表达式。
Used rxjava 1.x and lambda expressions.
编辑
如果我理解你,你想要替换那个监听器,而不是把它包装成observable。我在参考你的评论时添加了其他例子。哦..如果您只期望一件物品,也应该使用 Single 。
if I understand you well, you wanted to replace that listener, not wrap it into observable. I added other example in reference to your comment. Oh.. also you should use Single if you are expecting only one item.
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
});
这篇关于用RxJava中的observable替换回调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!