从改造方法返回赎回android上

问题描述 投票:1回答:1

这是我的改造方法:

@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呼叫转接>

rx-java retrofit2 rx-android
1个回答
2
投票

改造不具备Callable适配器,你不能在你的@GET方法使用它。

您可以使用:

  1. RxJava2 Observable, Flowable, Single, Completable & Maybe
  2. Java 8 CompletableFuture
  3. 改造Call

所以,你可以这样做:

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

在您的客户端:

  service.getCommentsRx()
        .subscribeOn(scheduler)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(finished, onError)
© www.soinside.com 2019 - 2024. All rights reserved.