Retrofit2 + RxJava向OnNext()中的Model类返回null

时间:2019-07-30 09:55:02

标签: java android retrofit2

我正在向服务器发送一个简单的get方法,并使用RxJava和Retrofit获得结果。我所做的是:

接口

public interface Posts {

    @GET("/typicode/demo/{path}")
    Observable<List<Beans>> getPosts(@Path("path") String path);
}

RetrofitInstance

public static Retrofit getInstance() {
        if (retrofit == null) {
            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
            retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
                    .client(client)
                    .build();
        }
        return retrofit;
    }

MainActivity

Observer<List<Beans>> observer = new Observer<List<Beans>>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(List<Beans> value) {
                Log.d("Saket", value.toString());
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };
        Posts client = RetrofitClientInstance.getInstance().create(Posts.class);
        client.getPosts("posts").observeOn(Schedulers.newThread()).subscribeOn(AndroidSchedulers.mainThread()).subscribe(observer);

我使用HTTPLoggingInterceptor得到正确的输出。

2 个答案:

答案 0 :(得分:2)

您可以像这样使用subscribeWith

还更改订阅-> Schedulers.newThread()或Schedulers.io() 现在,您正在通过UI线程进行网络调用

["get","color"]

答案 1 :(得分:0)

当我使用Single Observable和DisposableSingleObserver作为观察者时,它可以工作。