2016-01-22 47 views
1

所以我使用Retrofit 2来创建我所有的API调用。如何为我的所有Retrofit2调用设置默认的onResponse?

这是我的项目中的一些示例代码。首先为Api。

public class Api { 
public static final String BASE_URL = "http://www.api.com/"; 
public static final String kApiUserLogin = "user/login/"; 
public static final String kApiUserRegister = "user/register/"; 

private static ApiInterface sService; 

public static ApiInterface client() { 
    if (sService == null) { 
     Gson gson = new GsonBuilder() 
       .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") 
       .create(); 

     OkHttpClient okHttpClient = new OkHttpClient.Builder() 
       .build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .client(okHttpClient) 
       .addConverterFactory(GsonConverterFactory.create(gson)) 
       .build(); 

     sService = retrofit.create(ApiInterface.class); 
    } 

    return sService; 
} 

public interface ApiInterface { 
    @POST(kApiUserLogin) 
    Call<UserResponse> loginUser(@Body UserDTO userDTO); 

    @POST(kApiUserRegister) 
    Call<UserResponse> registerUser(@Body UserDTO userDTO); 

}} 
} 

然后这是我如何使用它:

    Call<UserResponse> call = Api.client().registerUser(user); 
        call.enqueue(new Callback<UserResponse>() { 
         @Override 
         public void onResponse(Response<UserResponse> response) { 
          UserResponse userResponse = response.body(); 
          if (userResponse.getError() == null) { 
           UserDTO userDto = userResponse.getUser(); 
           User.getInstance().setUserDTO(userDto); 

           Intent intent = new Intent(getActivity(), MainActivity.class); 
           startActivity(intent); 
          } else { 
           dialog 
             .setTitleText("Error") 
             .setContentText(userResponse.getError()) 
             .setConfirmText("OK") 
             .changeAlertType(SweetAlertDialog.ERROR_TYPE); 
          } 
         } 

         @Override 
         public void onFailure(Throwable t) { 
          Log.d("CallBack", " Throwable is " + t); 
          dialog.hide(); 
         } 
        }); 

        Call<UserResponse> call = Api.client().loginUser(user); 
        call.enqueue(new Callback<UserResponse>() { 
         @Override 
         public void onResponse(Response<UserResponse> response) { 
          UserResponse userResponse = response.body(); 
          if (userResponse.getError() == null) { 
           UserDTO userDto = userResponse.getUser(); 
           User.getInstance().setUserDTO(userDto); 

           Intent intent = new Intent(getActivity(), MainActivity.class); 
           startActivity(intent); 
          } else { 
           dialog 
             .setTitleText("Error") 
             .setContentText(userResponse.getError()) 
             .setConfirmText("OK") 
             .changeAlertType(SweetAlertDialog.ERROR_TYPE); 
          } 
         } 

         @Override 
         public void onFailure(Throwable t) { 
          Log.d("CallBack", " Throwable is " + t); 
          dialog.hide(); 
         } 
        }); 
       } 

现在的问题是我怎么让这个我可以重用的代码为if (userResponse.getError() == null)onReponseelse节?不知不觉,这只是一个例子。整个应用程序中有很多API调用,所以它不像我可以在这两种方法下面调用一个方法。

我正在寻找更多的默认的onResponse处理程序或类似的Api类内?

与此同时,我当然想要为onFailure做同样的事情。

也许I'm过于复杂的东西很简单......

回答

0

如果我理解正确的,这将是足够的。

Call<UserResponse> call = Api.client().registerUser(user); 
    call.enqueue(new Callback<UserResponse>() { 
     @Override 
     public void onResponse(Response<UserResponse> response) { 
      processResponse(response.body()); 
     } 

     @Override 
     public void onFailure(Throwable t) { 
      Log.d("CallBack", " Throwable is " + t); 
      dialog.hide(); 
     } 
    }); 

    Call<UserResponse> call = Api.client().loginUser(user); 
    call.enqueue(new Callback<UserResponse>() { 
     @Override 
     public void onResponse(Response<UserResponse> response) { 
      processResponse(response.body()); 
     } 

     @Override 
     public void onFailure(Throwable t) { 
      Log.d("CallBack", " Throwable is " + t); 
      dialog.hide(); 
     } 
    }); 
} 

    private void processResponse(UserResponse userResponse) { 
     if (userResponse.getError() == null) { 
      UserDTO userDto = userResponse.getUser(); 
      User.getInstance().setUserDTO(userDto); 

      Intent intent = new Intent(getActivity(), MainActivity.class); 
      startActivity(intent); 
     } else { 
      dialog 
        .setTitleText("Error") 
        .setContentText(userResponse.getError()) 
        .setConfirmText("OK") 
        .changeAlertType(SweetAlertDialog.ERROR_TYPE); 
     } 
    } 
+0

嘿@Ozgur,谢谢你的回答。我一发布就编辑我的问题,也许你没有看到我的编辑。我提到在不同类别的应用程序中有很多API调用。我正在寻找更多的默认onResponse和onFailure处理程序或类似的Api类内? – Jan

+0

我想这是最简单的代码块改造可以提供。但我也想知道答案。 – Ozgur

+0

如果我在一个星期内没有得到更好的答案,我会按你的方式选择你的答案。谢谢! – Jan

相关问题