"SortBy"を変更すると、私のプログラムはNetworkIOを実行して最上位のムービーを取得して表示します。Android RxJava非同期呼び出しマップ機能
しかし、私がmap
に機能call
にsubscribeOn(Schedulers.io())
、NETWORKIO MovieDB.getPopular()
とMovieDB.getTopRated()
を行っているものの、メインスレッド上でexcutedているようだと私はandroid.os.NetworkOnMainThreadException
を取得します。
私はpublic Movie[] call(SortBy sortBy)
を非同期にする方法を知りました。
sortObservable.map(new Func1<SortBy, Movie[]>() {
@Override
public Movie[] call(SortBy sortBy) {
try {
switch (sortBy) {
case POPULAR:
return MovieDB.getPopular(); // NETWORK IO
case TOP_RATED:
return MovieDB.getTopRated(); // NETWORK IO
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return new Movie[0];
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Movie[]>() {
@Override
public void call(Movie[] movies) {
imageAdapter.loadData(movies);
}
});
、およびラップをあなたのioは観察可能な状態で呼び出します。 – njzk2
'subscribeOn'は' subscribe'が呼び出される場所です。先のobservableのスレッドを制御するには 'observeOn'を使います。 – njzk2
@ njzk2私はまだ 'android.os.NetworkOnMainThreadException'を取得しています。ソースコードはhttps://github.com/zizhengwu/Popular-Movies-Stage-1/blob/load-image/app/src/main/java/です。 com/zizhengwu/popular_movies_stage_1/MainActivity.java#L75 – knx54693