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();
我是 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();