java - Retrofit2+RxJava 在 OnNext() 中向 Model 类返回 null

标签 java android retrofit2

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

界面

public interface Posts {

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

改造实例

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;
    }

主要 Activity

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 获得正确的输出。

最佳答案

你可以像这样使用 subscribeWith

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

 client.getPosts("posts")
                    .subscribeOn(Schedulers.newThread()) // change
                    .observeOn(AndroidSchedulers.mainThread()) // change
                    .subscribeWith(new Observer<Response<Observable<List<Beans>>>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(Response<Observable<List<Beans>>> response) {

                        }

                        @Override
                        public void onError(Throwable e) {
                            e.printStackTrace();


                        }

                        @Override
                        public void onComplete() {


                        }
                    });

关于java - Retrofit2+RxJava 在 OnNext() 中向 Model 类返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57268956/

相关文章:

java - Android MVP : What is an Interactor?

android - 无法通过 Intent 启动 ListActivity

android - Okhttp 在与 Retrofit RxJavaCallAdapterFactory 一起使用时忽略 Dispatcher 设置

java - 即使 Optional 包含值,Optional.orElse 的参数也会被调用

java - 在 Tomcat 6-Java 7/8 中运行 Tomcat 6-Java 6 WebApps

android - Androids MediaPlayer onErrorListener MEDIA_ERROR_SERVER_DIED出现问题

java - 如何反序列化这个动态值 JSON?

android - 在 retrofit 认证器中使用协程

java - MYSQL - 将1列中的所有数据与同一列中的最大值相乘

java - 带图标的抽屉导航 ListAdapter