我在Retrofit
和重复检查方面遇到问题。
每次response
状态码或类型时,我都必须检查!
我需要一个wrapper
作为请求方法,以检查该重复项是否起作用。
(重复的作品包括:showLoading()
,response.code()
,onFailure()
句柄...)。
我需要一个GenericMethod
:
UserService service = RetrofitInstance.getRetrofitInstance().create(UserService.class);
service.RequestVerification(token, mobileNumber).enqueue(new Callback<ClientData<User>>() {
@Override
public void onResponse(@NonNull Call<ClientData<User>> call, @NonNull Response<ClientData<User>> response) {
doAction();//Action must passed to this method.
GeneralTools.hideLoading();
}
@Override
public void onFailure(@NonNull Call<ClientData<User>> call, @NonNull Throwable t) {
GeneralTools.hideLoading();
dialogError.show();
}
});
答案 0 :(得分:1)
尝试以下
private static class CallbackHandler<T> implements Callback<T> {
@Override
public void onResponse(Call<T> call, Response<T> response) {
int code = response.code();
if (code >= 200 && code < 300) {
onSuccess(response);
} else if (code == 401) {
// logic to refresh token or user then recall the same api
call.clone().enqueue(this);
}
}
@Override
public void onFailure(Call<T> call, Throwable t) {
}
public void onSuccess(Response<T> response) {
}
}
然后像下面这样更改您的通话
service.RequestVerification(token, mobileNumber).enqueue(new CallbackHandler<ClientData<User>>() {
@Override
public void onSuccess(Response<ClientData<User>> response) {
doAction();//Action must passed to this method.
GeneralTools.hideLoading();
}
@Override
public void onFailure(@NonNull Call<ClientData<User>> call, @NonNull Throwable t) {
GeneralTools.hideLoading();
dialogError.show();
}
});