代码之家  ›  专栏  ›  技术社区  ›  AmirNorouzpour

根据请求改进通用基本方法

  •  1
  • AmirNorouzpour  · 技术社区  · 7 年前

    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();
                }
            });
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Krishna Sharma    6 年前

    试试下面

    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();
        }
    });
    
    推荐文章