我正在尝试在android的上下文中学习rxJava和反应式编程,我觉得我几乎就在那里,我只是无法完全理解我完全理解我在做什么。
我有以下代码,它从数据库中获取一个名为iApps的类的实例列表
myHelper m = new myHelper(getApplication());
m.getApps()
.observeOn(Schedulers.newThread())
.subscribe(currentApps::addAll,
throwable -> Log.e("Error Observable", throwable.toString() + " " + Arrays.toString(throwable.getStackTrace())),
() -> compareLists(availableApps, currentApps));
}
使用以下方法: //来自我的数据库调用函数
public Callable<ArrayList<iApp>> getApps()
{
return this::getCurrentInfo;
}
自定义助手功能
public class myHelper {
Context ctx;
tQuery t;
public myHelper(Context _ctx)
{
this.ctx = _ctx;
t = new tQuery(_ctx);
}
Observable<ArrayList<iApp>> getApps()
{
return makeObservable(t.getApps())
.subscribeOn(Schedulers.computation());
}
private static <T> Observable<T> makeObservable(final Callable<T> func) {
return Observable.create(
new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
try {
subscriber.onNext(func.call());
} catch (Exception ex) {
subscriber.onError(ex);
}
}
});
}
}
然而,我的完成永远不会运行。我通过循环遍历iApp的结果并输出其中一个字段来检查onNext,这样我就可以看到正在收集数据,但是我的compareLists函数永远不会运行。
有人可以解释我的疏忽吗?
答案 0 :(得分:1)
那很令人尴尬!
private static <T> Observable<T> makeObservable(final Callable<T> func) {
return Observable.create(
new Observable.OnSubscribe<T>() {
@Override
public void call(Subscriber<? super T> subscriber) {
try {
subscriber.onNext(func.call());
subscriber.onCompleted();
} catch (Exception ex) {
subscriber.onError(ex);
}
}
});
}