1.场景
比如用户需要在子线程中网络请求,返回可能是请求出错,也可能是请求成功返回的状态码为失败,同时可能返回成功不是自己想要的内容,此时需要告诉那些观察者两种状态:要么成功,要么失败!
2.看一段代码
这种后面拿不到返回值,很烦!
Single.just(curData).map(new Func1<PhotoData, Observable<String>>() {
@Override
public Observable<String> call(PhotoData photoData) {
String dbCachePath = getDbCachePath(photoData);
if(TextUtils.isEmpty(dbCachePath)){
return Observable.error(new Exception("dbCachePath is null"));
}else {
return Observable.just(dbCachePath);
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleSubscriber<Observable<String>>() {
@Override
public void onSuccess(Observable<String> value) {
}
@Override
public void onError(Throwable error) {
}
});
第二种推荐:
Single.create(new Single.OnSubscribe<String>() {
@Override
public void call(SingleSubscriber<? super String> singleSubscriber) {
String dbCachePath = getDbCachePath(fileName);
if(TextUtils.isEmpty(dbCachePath)){
singleSubscriber.onSuccess(dbCachePath);
}else {
singleSubscriber.onError(new Exception("dbCachePath is null"));
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleSubscriber<String>() {
@Override
public void onSuccess(String value) {
}
@Override
public void onError(Throwable error) {
}
});
3.总结
思想:在生产数据(网络请求,db操作等)中拿到观察者句柄,然后传递状态参数给它。
使用:Oberserable的create中的事件实例中的call方法中可以拿到观察者对象,想传什么状态就传什么状态。