RxJava and Retrofit2: NetworkOnMainThreadException

AG1

I realize that I am using subscribeOn()/observeOn() on the MainThread. What are the set of options I can pass into subscribeOn()? What are the set of options I can pass into observeOn()?

12-17 21:36:09.154 20550-20550/rx.test D/MainActivity2: [onCreate]
12-17 21:36:09.231 20550-20550/rx.test D/MainActivity2: starting up observable...
12-17 21:36:09.256 20550-20550/rx.test D/MainActivity2: [onError] 
12-17 21:36:09.256 20550-20550/rx.test W/System.err: android.os.NetworkOnMainThreadException

GovService.java

import java.util.List;
import retrofit.Call;
import retrofit.http.GET;
import rx.Observable;

public interface GovService {
    @GET("/txt2lrn/sat/index_1.json")
    Observable<MyTest> getOneTestRx();
}

MyTest.java

public class MyTest {
    private String name, url;
    private int num;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Name: " + this.name + ", num: " + this.num + ", url: " + this.url;
    }
}

MainActivity2.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;

import retrofit.GsonConverterFactory;
import retrofit.Retrofit;
import retrofit.RxJavaCallAdapterFactory;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class MainActivity2 extends AppCompatActivity {
    private final String TAG = getClass().getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "[onCreate]");
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        RecyclerView mRV = (RecyclerView) findViewById(R.id.rv);
        mRV.setLayoutManager(new LinearLayoutManager(this));// setup LayoutManager
        mRV.setItemAnimator(new DefaultItemAnimator());// setup ItemAnimator

        // setup retrofit
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://goanuj.freeshell.org")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        GovService service = retrofit.create(GovService.class);

        Log.d(TAG, "starting up observable...");
        Observable<MyTest> o = service.getOneTestRx();
        o.subscribeOn(Schedulers.io());
        o.observeOn(AndroidSchedulers.mainThread());
        o.subscribe(new Subscriber<MyTest>() {
            @Override
            public void onCompleted() {
                Log.d(TAG, "[onCompleted] ");
            }

            @Override
            public void onError(Throwable t) {
                Log.d(TAG, "[onError] ");
                t.printStackTrace();
            }

            @Override
            public void onNext(MyTest m) {
                Log.d(TAG, "[onNext] " + m.toString());
            }
        });
    }
}
Ilya Tretyakov

Rewrite the last part of your code to:

service.getOneTestRx()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Subscriber<MyTest>() {
        @Override
        public void onCompleted() {
            Log.d(TAG, "[onCompleted] ");
        }

        @Override
        public void onError(Throwable t) {
            Log.d(TAG, "[onError] ");
            t.printStackTrace();
        }

        @Override
        public void onNext(MyTest m) {
            Log.d(TAG, "[onNext] " + m.toString());
        }
    });

Important note from @akarnokd:

Worth mentioning that one needs to chain the calls as here because Observable is not the builder pattern (where you modify the settings of an existing object)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RxJava和Retrofit2:NetworkOnMainThreadException

来自分类Dev

NetworkOnMainThreadException与Retrofit-beta2和rxjava

来自分类Dev

concatMap()中带有Retrofit 2和RxJava的NetworkOnMainThreadException

来自分类Dev

concatMap()中带有Retrofit 2和RxJava的NetworkOnMainThreadException

来自分类Dev

订阅时出现RxJava NetworkOnMainThreadException

来自分类Dev

使用RxJava / RxAndroid的Retrofit2尾递归

来自分类Dev

如何使用Retrofit2 + RxJava添加授权标头

来自分类Dev

使用Retrofit2和RxJava获取分页URL

来自分类Dev

[RxJava]如何在Android RxJava上通过`retryWhen()`处理网络错误×retrofit2

来自分类Dev

安卓Retrofit2 / RxJava2 /间 - 简单的数据处理

来自分类Dev

如何在Kotlin Android上使用Retrofit2,RxJava2读取JSON文件

来自分类Dev

Api 调用链接到某个限制 Rxjava2 + Retrofit2

来自分类Dev

改造2错误:NetworkOnMainThreadException

来自分类Dev

IllegalArgumentException:无法找到rx的呼叫适配器。可观察到的RxJava,Retrofit2

来自分类Dev

RxJava Retrofit2 API使用订阅或平面图进行多次调用

来自分类Dev

来自不正确线程的领域访问Android Retrofit2 RxJava

来自分类Dev

RxJava NetworkOnMainThreadException尽管正确调用了watchOn(io线程)

来自分类Dev

可观察的可订阅rxjava时出现NetworkOnMainThreadException

来自分类Dev

RxJava和Retrofit2:链接依赖的Observable结果以“一次性”返回组合的pojo

来自分类Dev

使用RxJava + Retrofit 2的正确方法

来自分类Dev

RxJava + Retrofit轮询

来自分类Dev

Retrofit2和Kotlin

来自分类Dev

retrofit2:添加RequestInterceptor

来自分类Dev

Retrofit2 复杂请求

来自分类Dev

Retrofit + RxJava中的链接请求

来自分类Dev

Android Retrofit 2 + RxJava:聆听无尽的视频流

来自分类Dev

Retrofit 2和RxJava错误处理运算符

来自分类Dev

如何使用RxJava处理Retrofit 2中的网络错误

来自分类Dev

如何将Retrofit 2与Realm和RxJava结合

Related 相关文章

  1. 1

    RxJava和Retrofit2:NetworkOnMainThreadException

  2. 2

    NetworkOnMainThreadException与Retrofit-beta2和rxjava

  3. 3

    concatMap()中带有Retrofit 2和RxJava的NetworkOnMainThreadException

  4. 4

    concatMap()中带有Retrofit 2和RxJava的NetworkOnMainThreadException

  5. 5

    订阅时出现RxJava NetworkOnMainThreadException

  6. 6

    使用RxJava / RxAndroid的Retrofit2尾递归

  7. 7

    如何使用Retrofit2 + RxJava添加授权标头

  8. 8

    使用Retrofit2和RxJava获取分页URL

  9. 9

    [RxJava]如何在Android RxJava上通过`retryWhen()`处理网络错误×retrofit2

  10. 10

    安卓Retrofit2 / RxJava2 /间 - 简单的数据处理

  11. 11

    如何在Kotlin Android上使用Retrofit2,RxJava2读取JSON文件

  12. 12

    Api 调用链接到某个限制 Rxjava2 + Retrofit2

  13. 13

    改造2错误:NetworkOnMainThreadException

  14. 14

    IllegalArgumentException:无法找到rx的呼叫适配器。可观察到的RxJava,Retrofit2

  15. 15

    RxJava Retrofit2 API使用订阅或平面图进行多次调用

  16. 16

    来自不正确线程的领域访问Android Retrofit2 RxJava

  17. 17

    RxJava NetworkOnMainThreadException尽管正确调用了watchOn(io线程)

  18. 18

    可观察的可订阅rxjava时出现NetworkOnMainThreadException

  19. 19

    RxJava和Retrofit2:链接依赖的Observable结果以“一次性”返回组合的pojo

  20. 20

    使用RxJava + Retrofit 2的正确方法

  21. 21

    RxJava + Retrofit轮询

  22. 22

    Retrofit2和Kotlin

  23. 23

    retrofit2:添加RequestInterceptor

  24. 24

    Retrofit2 复杂请求

  25. 25

    Retrofit + RxJava中的链接请求

  26. 26

    Android Retrofit 2 + RxJava:聆听无尽的视频流

  27. 27

    Retrofit 2和RxJava错误处理运算符

  28. 28

    如何使用RxJava处理Retrofit 2中的网络错误

  29. 29

    如何将Retrofit 2与Realm和RxJava结合

热门标签

归档