将方法 RxJava1 迁移到 RxJava2

Migrate method RxJava1 to RxJava2

我继承了一个应用程序,我正在尝试更新 RxJava 库。

我的问题已经够多了,因为我不太明白它是如何编程的,我想知道是否有人可以帮助我:)

在发布之前,我在 Google 和此处进行了充分的搜索以了解如何迁移,但我找不到解决方案,因为我看到的一切都不起作用。

我有一个接口和一个 class 使用 Rx 的方法。

这是接口方法:

@GET(QUERY_ENTITIES)
Observable<Response<List<DBFile>>> dbFileList(@Path("classId") String classId, @QueryMap Map<String, String> parameters);

这是 Rx 方法:

private void loadDBData(final OnDataRequestListener onDataRequestListener,
                        final OnDBCallbackListener onDBCallbackListener,
                        String classId, Map<String, String> parameters) {

    /* REQUESTS THE DBs' DATA */
    mRestInterface
            .dbFileList(classId, parameters)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .first(new Func1<Response<List<DBFile>>, Boolean>() {
                @Override
                public Boolean call(Response<List<DBFile>> listResponse) {
                    if(listResponse.code() == HttpURLConnection.HTTP_FORBIDDEN) {
                        return false;
                    }
                    return true;

                }
            })
            /* Separates the DB list from the response */
            .flatMap(new Func1<Response<List<DBFile>>, Observable<DBFile>>() {
                @Override
                public Observable<DBFile> call(Response<List<DBFile>> responseJobs) {
                    return Observable.from(responseJobs.body());
                }

            })
            /* Transforms the data into a db data observable */
            .flatMap(new Func1<DBFile, Observable<DBFile>>() {
                @Override
                public Observable<DBFile> call(DBFile data) {
                    return Observable.just(data);
                }
            })
            /* Define retry (3 Times) */
            .retry(new Func2<Integer, Throwable, Boolean>() {
                @Override
                public Boolean call(Integer attempts, Throwable throwable) {
                    return attempts <= TOTAL_RETRIES;
                }
            })
            /*
             Transforms the data into a list to receive the answer just when the entire list is loaded
             */
            .toList()
            /* Defines a request timeout */
            .timeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS)
            /* Sends the data to the main presenter */
            .subscribe(new Observer<List<DBFile>>() {

                @Override
                public void onCompleted() {
                    if (onDBCallbackListener instanceof VerifyApplicationUpdatesPresenter){
                        ((VerifyApplicationUpdatesPresenter) onDBCallbackListener).checkConf();
                    }else{
                        onDataRequestListener.onCompleted();
                    }
                }

                @Override
                public void onError(Throwable e) {
                    if(e instanceof NoSuchElementException){
                        onDataRequestListener.onDataError(e.toString());
                    }else {
                        onDataRequestListener.onDataError();
                    }
                }

                @Override
                public void onNext(List<DBFile> dbFileList) {
                    if (onDBCallbackListener != null) {
                        onDBCallbackListener.onDBDataCollected(dbFileList);
                    }

                }
            });

}

非常感谢您的帮助! 谢谢!

更改您的界面 return 键入如下内容

 @GET(QUERY_ENTITIES)
Observable<List<DBFile>> dbFileList(@Path("classId") String classId, @QueryMap Map<String, String> parameters);

更改您的 api 调用函数,如下所示

mRestInterface.dbFileList(classId, parameters)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            /* Define retry (3 Times) */
            .retry(3)
            /* Defines a request timeout */
            .timeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS)
            /* Sends the data to the main presenter */
            .subscribe(new Observer<List<DBFile>>() {
                @Override
                public void onSubscribe(Disposable disposable) {

                }

                @Override
                public void onNext(List<DBFile> dbFiles) {
                    if (onDBCallbackListener != null) {
                        onDBCallbackListener.onDBDataCollected(dbFileList);
                    }
                }

                @Override
                public void onError(Throwable throwable) {
                    if(e instanceof NoSuchElementException){
                        onDataRequestListener.onDataError(e.toString());
                    }else {
                        onDataRequestListener.onDataError();
                    }
                }

                @Override
                public void onComplete() {
                    if (onDBCallbackListener instanceof VerifyApplicationUpdatesPresenter){
                        ((VerifyApplicationUpdatesPresenter) onDBCallbackListener).checkConf();
                    }else{
                        onDataRequestListener.onCompleted();
                    }
                }
            });