RxJava 而不是 Retrofit 回调

RxJava instead of Retrofit callback

我是 RxJava 的新手,我对如何在 RxJava 上更改 Retrofit 的新回调有疑问?

我的工作代码在这里:

Service service = new Retrofit.Builder()
            .baseUrl("lalala")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(Service.class);

然后我写

Call<Board> call = service.getBoard("lalala");

call.enqueue(new Callback<Board>() {
                        @Override
                        public void onResponse(Call<Board> call, Response<Board> response) {
                            if (response.isSuccessful()) {
                                recyclerView.setAdapter(new BoardAdapter(MainActivity.this, response.body().getThreads()));
                            }
                        }

                        @Override
                        public void onFailure(Call<Board> call, Throwable t) {
                            Toast.makeText(MainActivity.this, "error :(", Toast.LENGTH_SHORT).show();
                        }
                    });*/

但是当我想在RxJava上使用它时,我不知道该怎么做。我试过了。

service.getRxBoard(boardq)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Board>() {
                           @Override
                           public void accept(Board board) throws Exception {
                               recyclerView.setAdapter(new BoardAdapter(MainActivity.this, board.getThreads()));
                           }
                       }, new Consumer<Throwable>() {
                           @Override
                           public void accept(Throwable throwable) throws Exception {
                               Toast.makeText(MainActivity.this, "error :(", Toast.LENGTH_SHORT).show();

                           }
                       });

而且它不起作用。我得到一个例外:

 java.lang.RuntimeException: Unable to start activity ComponentInfo
 Unable to create call adapter for io.reactivex.Observable

您需要使用 Retrofit 注册一个可以创建 RxJava 类型的调用适配器工厂。

This is the library you need。像这样将其添加到您的 build.gradle:

compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

然后在构建 Retrofit 实例时,像这样添加适配器工厂:

Retrofit.Builder()
    .baseUrl("https://example.com/")
    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
    .build();