gpt4 book ai didi

java - 无法在未调用的线程上 toast ,RxJava2

转载 作者:行者123 更新时间:2023-11-29 23:30:32 25 4
gpt4 key购买 nike

我有这个代码:

compositeDisposable.add(RetrofitClient
.getApi()
.getData()
.flatMap(response -> {
Data data;
if (response.isSuccessful()) {
data = response.body();
//insert data to database
Database.getInstance(context)
.getDao()
.insert(data);
} else {
ResponseBody responseBody = response.errorBody();
if (responseBody != null) {
data = new Gson().fromJson(responseBody.charStream(), Data.class);
}
}
return Observable.just(data);
})
.onErrorResumeNext(throwable -> {
//get data from database
Data data = Database.getInstance(context).getDao().getData();
return Observable.just(data);
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(throwableObservable ->
throwableObservable.take(1).delay(1, TimeUnit.SECONDS))
.doOnTerminate(view::hideScreenLoader)
.subscribe(this::showData, throwable -> {
Toast.makeText(context,
throwable.getMessage(), Toast.LENGTH_LONG).show();
}));

我不明白为什么有时用户会收到此错误:“由 java.lang.RuntimeException 引起无法在未调用 Looper.prepare() 的线程上运行”。

Toast 必须在主线程调用,谢谢。

最佳答案

我在这个主题中找到了决定:how to handle RxAndroid errors in the main thread ;

需要交换“retryWhen”和“observeOn”,因为retryWhen有“延迟功能”,即切换到计算线程:)

关于java - 无法在未调用的线程上 toast ,RxJava2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com