将方法 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();
}
}
});
我继承了一个应用程序,我正在尝试更新 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();
}
}
});