我试过这样的事情:
create(new observable.onsubscribe>(){@override public void call(subscriber>subscriber){subscriber.onnext(getList());subscriber.oncompleted();}}).subscribe...
但是这个订阅在一个迭代上,onNext只传递完整的列表,而不是列表中的每个OIbject。我错过了什么?我该怎么做?谢谢
更新
以下是我正在尝试做的事情(以及如何使用toSortedList):
Observable.from(getList())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.toSortedList(new Func2<Object, Object, Integer>() {
@Override
public Integer call(Object left, Object right) {
if (left.equals(right))
return 0;
return left.getLabel(pm).compareToIgnoreCase(right.getLabel(pm));
}
})
.subscribe(new Observer<List<Object>>() {
//On next sends a List of objects I'm using
}
问题是需要在另一个线程上调用getList()(它返回的是可迭代的,而不是可观察的)。也许我没有正确使用你的第一个解决方案Dwursteisen。
我不明白为什么它不起作用:
Observable.just(0)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(new Func1<Integer, Observable<Object>>() {
@Override
public Observable<Object> call(Integer integer) {
return Observable.from(getList());
}
})
.toSortedList(new Func2<Object, Object, Integer>() {
@Override
public Integer call(Object left, Object right) {
if (left.equals(right))
return 0;
return left.getLabel(pm).compareToIgnoreCase(right.getLabel(pm));
}
})
.subscribe( ... )
或者用subscribe替换flatMap调用并在onNext中执行所有操作,它仍然在主线程上调用getList()...
如果要使用特定的线程,可以使用subscribeon
方法指定要使用哪个“tread”(调度程序)。
sourceObservable.subscribeOn(httpScheduler)
.flatMap(Observable::from)
.subscribe();
如果它不起作用,您仍然可以使用您的解决方案。但只需在列表中迭代:
Observable.create(new Observable.OnSubscribe<CategorizedActivityInfoWrapper>() {
@Override
public void call(Subscriber<? super CategorizedActivityInfoWrapper> subscriber) {
for(o : getList()) {
subscriber.onNext(o);
}
subscriber.onCompleted();
}
}).subscribe ...
更新
Observable.from(getList()).subscribe();
List objs = getList();
Observable.from(objs).subscribe();
目前,我使用的是firebase实时数据库。因此,我的数据更改来自另一个线程。因此,我无法控制何时更新新的数据。然后我如何知道何时调用以刷新UI? 谢谢
我正在我的UI线程中调用一个方法。在这个方法中创建了一个新线程。我需要UI线程等待这个新线程完成,因为我需要这个线程的结果来继续UI线程中的方法。但我不想让UI在等待时冻结。有没有办法让UI线程在不忙的情况下等待?。
我正在尝试通过将相关位分组到较小的 XML 中,将大量 XML 分解为更小、更易于维护的文件。例如,这是我的消息,其中包含100多个“消息”元素。 所以我的计划是做一些像- xi:include中的XML不是有效的XML,因为它们没有根元素。这可能吗? 当我对此应用模式验证时,我得到以下错误-“根元素之后的文档中的标记必须是格式良好的”。 作为测试,如果我只有一个< code > 我使用Docum
我有一个使用模块的运行的进程: 其结果是: 这里,调用来处理图像(附件)并将OCR结果输出到myop。txt。 现在,我希望这在多个进程上发生,代表这个注释(或者直接看到这个),所以代码在这里: 这段代码所做的是调用4次,将流程对象保存在列表中,遍历所有这些对象,直到它们全部完成。下面给出了无限循环实现的说明。 这里的问题是后一个程序需要花费大量的时间来完成。它一直在使用函数等待进程完成,该函数为
我有4条线。每个人每x秒打印给定的字母x次。任务是一次启动3个线程,在至少一个前一个线程完成时启动第四个线程。我不知道如何通知最后一个线程在适当的时间运行。
我试着运行一个程序,使用线程显示带有数字的乘法、除法、加法和减法表。 但是我希望数字被乘以或相加等。由用户选择。 也就是说,程序应该在用户为每个操作选择一个数字后运行,然后显示结果。