学习者在这里,我正在尝试添加一个重试按钮,以便在改造Callback#onFailure
方法出现错误时添加。
在某种程度上遵循 Android Architecture Guide,我可以调用、保存数据并将其显示在 RecyclerView 上。这是我到目前为止所做的一般流程:
在PagedList.BoundaryCallback
我得到响应并保存它。在这里,我还创建了一个 LiveData NetworkState
,我正在MainActivity
通过ViewModel
课堂观察。
@Override
public void onZeroItemsLoaded() {
if (isFetchNeeded())
mClient.fetchFirstNetworkCall().enqueue(getRetrofitCallback());
}
@Override
public void onItemAtEndLoaded(@NonNull Item itemAtEnd) {
if (mNextPageToken != null)
mClient.fetchNextNetworkCall(mNextPageToken).enqueue(getRetrofitCallback());
}
@Override
public void onResponse(@NonNull Call<BloggerApi> call, @NonNull Response<BloggerApi> response) {
mObservableNetwork.setValue(NetworkState.LOADING);
if (response.isSuccessful()) {
mExecutors.diskIO().execute(() -> {
insertItemsToDb(responseBody.getItems());
mObservableNetwork.postValue(NetworkState.SUCCESS);
});
} else {
String error = response.errorBody() == null ? "Unknown Error" : String.valueOf(response.errorBody());
mObservableNetwork.setValue(NetworkState.error(error));
}
}
@Override
public void onFailure(@NonNull Call<BloggerApi> call, @NonNull Throwable t) {
mObservableNetwork.setValue(NetworkState.error(t.getMessage()));
}
然后在 UI 上:
mViewModel.getNetworkState().observe(this, networkState -> {
if (networkState.getStatus() == Status.ERROR) {
retryButton.setOnClickListener(view -> {
// todo: Implement what to do
});
}
});
我在这里迷路了,如果由于某种原因出现错误,我不知道如何实现重试按钮来进行最后一次调用。你能帮我弄清楚重试按钮实际上应该做什么来获得回调吗?
谢谢你。
PS 我是 Java 新手,到目前为止 Kotlin 已经不在我的联盟中,所以无法弄清楚 Google 示例项目是如何实现重试方法的,而且我的示例项目也在GitHub/DemoBlogApp 上供任何参考。任何帮助表示赞赏。