这是我的改造方法:
@GET("comments")
Callable<List<Comments>> getCommentsRx();
我创建Thread类的东西Rxjava:
public static <T> Disposable async(Callable<List<T>> task, Consumer<List<T>> finished, Consumer<Throwable> onError) {
return async(task, finished, onError, Schedulers.io());
}
public static <T> Disposable async(Callable<List<T>> task, Consumer<List<T>> finished,
Consumer<Throwable> onError, Scheduler scheduler) {
finished = finished != null ? finished
: (a) -> {
};
onError = onError != null ? onError
: throwable -> {
};
return Single.fromCallable(task)
.subscribeOn(scheduler)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(finished, onError);
}
我有loadjson方法来从网络获取数据:
private void loadJson(Consumer<List<Comments>> finished) {
Threading.async(() -> fetchingServer(),finished,null);
}
private List<Comments> fetchingServer() {
JsonplaceholderService service =
ServiceGenerator.createService(JsonplaceholderService.class);
try {
return service.getCommentsRx().call();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
但我在fetchingServer
方法有错误。
java.lang.IllegalArgumentException异常:无法创建方法JsonplaceholderService.getCommentsRx为java.util.concurrent.Callable呼叫转接>
改造不具备Callable
适配器,你不能在你的@GET方法使用它。
您可以使用:
RxJava2 Observable, Flowable, Single, Completable & Maybe
,Java 8 CompletableFuture
Call
所以,你可以这样做:
@GET("comments")
Observable<List<Comments>> getCommentsRx(); //rx observable, not java.util.observable
在您的客户端:
service.getCommentsRx()
.subscribeOn(scheduler)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(finished, onError)