getCommentsRx(); 我已经为 Rxjava 创建了 Thread 类: public sta-6ren">
gpt4 book ai didi

android - 从 android 上的改造方法返回 Callable

转载 作者:行者123 更新时间:2023-11-29 16:31:54 25 4
gpt4 key购买 nike

这是我在 Retrofit 上的方法:

@GET("comments")
Callable<List<Comments>> getCommentsRx();

我已经为 Rxjava 创建了 Thread 类:

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: Unable to create call adapter for java.util.concurrent.Callable> for method JsonplaceholderService.getCommentsRx

最佳答案

Retrofit 没有用于Callable 的适配器,您不能在@GET 方法中使用它。

您可以使用:

  1. RxJava2 Observable、Flowable、Single、Completable & Maybe,

  2. Java 8 CompletableFuture

  3. 改造调用

所以,你可以这样做:

@GET("comments")
Observable<List<Comments>> getCommentsRx(); //rx observable, not java.util.observable

在您的客户端中:

  service.getCommentsRx()
.subscribeOn(scheduler)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(finished, onError)

关于android - 从 android 上的改造方法返回 Callable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com