我正在使用带有funcs的rxjava从我的API检索我的响应,如下所示:
@Override
public Single<MyInfoResponse> getMyInfoApiCall() {
return Rx2AndroidNetworking.get(ApiEndPoint.ENDPOINT_MY_INFO)
.addHeaders(mApiHeader.getProtectedApiHeader())
.build()
.getObjectSingle(MyInfoResponse.class);
}
现在,我正在检索此数据并在我的UI代码(使用常用的compositedisposables)中使用它,如下所示:
@Override
public void onViewPrepared() {
getCompositeDisposable().add(getDataManager()
.getMyInfoApiCall()
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(myInfoResponse -> {
getDataManager().updateMyManagerInfo(myInfoResponse);
if (myInfoResponse != null && myInfoResponse.getData() != null) {
getMvpView().updateMyRepo(myInfoResponse.getData());
}
}, throwable -> {
if (!isViewAttached()) {
return;
}
getMvpView().hideLoading();
// handle the error here
if (throwable instanceof ANError) {
ANError anError = (ANError) throwable;
handleApiError(anError);
}
}));
}
现在,每次我都有互联网连接,并尝试检索数据,它工作正常,但一旦我失去互联网连接,我试图缓存此数据,所以它仍然显示在用户界面上,直到网络连接恢复,准备更新数据即时的。我如何以最简单,最理想的方式解决这个问题?
我建议你使用android Room Persistence来使用离线支持。从下面的链接看看谷歌样本 https://developer.android.com/topic/libraries/architecture/room
在这种情况下 预取请求(以便在需要时可以从缓存返回)
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
.addPathParameter("pageNumber", "0")
.addQueryParameter("limit", "30")
.setTag(this)
.setPriority(Priority.LOW)
.build()
.prefetch();