- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Retrofit 和 RxJava 从 api 获取列表并显示在 recyclerview 中。
我使用了下面的代码-
ApiInterface apiService =
ApiService.getClient().create(ApiInterface.class);
Observable<MoviesResponse> call = apiService.getTopRatedMovies(API_KEY);
call.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
call.subscribe(new Observer<MoviesResponse>() {
@Override
public void onSubscribe(Disposable d) {
Toast.makeText(getApplicationContext(), d.toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onNext(MoviesResponse moviesResponse) {
movies=moviesResponse;
moviesAdapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onComplete() {
Toast.makeText(getApplicationContext(), "complete", Toast.LENGTH_LONG).show();
}
});
下面两行指定将在新线程中进行 REST 调用。当调用响应返回时,在 mainThread 上调用 onNext、onError 和 onComplete 方法。
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
但我收到 NetworkOnMainThreadException,当应用程序试图在其主线程上执行网络操作时会抛出该异常。为什么会收到此异常,我该如何解决?
最佳答案
那是因为您订阅了 2 次 observable。您可以从这里删除订阅方法:
call.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
所以它看起来像这样:
ApiInterface apiService =
ApiService.getClient().create(ApiInterface.class);
call.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<MoviesResponse>() {
@Override
public void onSubscribe(Disposable d) {
Toast.makeText(getApplicationContext(), d.toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onNext(MoviesResponse moviesResponse) {
movies=moviesResponse;
moviesAdapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
}
@Override
public void onComplete() {
Toast.makeText(getApplicationContext(), "complete", Toast.LENGTH_LONG).show();
}
});
关于android - NetworkOnMainThreadException 与 .subscribeOn(Schedulers.newThread()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49771447/
在我们的项目中,我遇到了以下方法: Thread t = Executors.defaultThreadFactory().newThread(new MyRunnable(importStarted
我正在尝试使用 Retrofit 和 RxJava 从 api 获取列表并显示在 recyclerview 中。 我使用了下面的代码- ApiInterface apiService =
我在普通的 JDK 8 上。我有这个简单的 RxJava 示例: Observable .from(Arrays.asList("one", "two", "three")) .doOnNext(wo
有人可以帮助解释为什么当我“阻塞并继续”观察者的 onNext 序列订阅了一个具有时间可观察序列的缓冲区时,Scheduler.NewThread 不再适用吗? 例如: 如果我通过缓冲一个数字序列 v
我试图为提交给 ThreadPoolExecutor 的每个 MyRunnable 分配一个编号,但没有成功。 我的代码片段: import java.util.concurrent.*; class
我正在使用 RxJava2 Android Networking 进行网络调用。我面临的问题是,当我尝试通过 Schedulers.io() 访问 API 时,有时它没有给出任何响应,而当我尝试使用
在 Retrofit 网络请求中使用 Schedulers.newThread() 与 Schedulers.io() 有什么好处。我见过很多使用 io() 的例子,但我想了解原因。 示例情况: ob
在我的论文中,我正在研究离散事件系统模拟器。模拟由一组 SimulatorThread extends Thread 组成,其操作包括将 Event 调度到 Simulator。每个 Simulato
我是一名优秀的程序员,十分优秀!