Rxjava 如何创建线程和 return 文本到 UI
Rxjava how to create a thread and return text to UI
我想要 运行 一个新线程,当用户单击按钮时。在此线程中,我在 TextView 中的“i++”和 return 字符串(“Text”+ i)之后调用 Sleep(2000)。
我有示例,但它不起作用:
Observable.create(new Observable.OnSubscribe<Void>() {
@Override
public void call(Subscriber<? super Void> subscriber) {
SystemClock.sleep(2000);
i++;
subscriber.onNext(null);
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
// code like text.setText("text" + i)
}
});
你用的是RxJava1还是RxJava2/3?
你想在订阅上创建一个新线程吗?如果是,何时使用 Schedulers.newThread()
而不是 .subscribeOn(Schedulers.computation())
在RxJava2/3中不允许发出空值subscriber.onNext(null);
。这实际上是你的问题。你想发射 i++ 而不是 null
.
我宁愿做这样的事情:
AtomicInteger i = new AtomicInteger(0);
Single.fromCallable(() -> {
Thread.sleep(1000);
return i.incrementAndGet();
}).subscribeOn(Schedulers.computation())
.observeOn(....)
.subscribe(v -> ...)
不建议在没有任何同步的情况下从不同的线程改变状态,因此使用 AtomicInteger。
我想要 运行 一个新线程,当用户单击按钮时。在此线程中,我在 TextView 中的“i++”和 return 字符串(“Text”+ i)之后调用 Sleep(2000)。 我有示例,但它不起作用:
Observable.create(new Observable.OnSubscribe<Void>() {
@Override
public void call(Subscriber<? super Void> subscriber) {
SystemClock.sleep(2000);
i++;
subscriber.onNext(null);
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
// code like text.setText("text" + i)
}
});
你用的是RxJava1还是RxJava2/3?
你想在订阅上创建一个新线程吗?如果是,何时使用 Schedulers.newThread()
而不是 .subscribeOn(Schedulers.computation())
在RxJava2/3中不允许发出空值subscriber.onNext(null);
。这实际上是你的问题。你想发射 i++ 而不是 null
.
我宁愿做这样的事情:
AtomicInteger i = new AtomicInteger(0);
Single.fromCallable(() -> {
Thread.sleep(1000);
return i.incrementAndGet();
}).subscribeOn(Schedulers.computation())
.observeOn(....)
.subscribe(v -> ...)
不建议在没有任何同步的情况下从不同的线程改变状态,因此使用 AtomicInteger。