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)
的onReponse
内else
节?不知不觉,这只是一个例子。整个应用程序中有很多API调用,所以它不像我可以在这两种方法下面调用一个方法。
我正在寻找更多的默认的onResponse处理程序或类似的Api类内?
与此同时,我当然想要为onFailure
做同样的事情。
也许I'm过于复杂的东西很简单......
嘿@Ozgur,谢谢你的回答。我一发布就编辑我的问题,也许你没有看到我的编辑。我提到在不同类别的应用程序中有很多API调用。我正在寻找更多的默认onResponse和onFailure处理程序或类似的Api类内? – Jan
我想这是最简单的代码块改造可以提供。但我也想知道答案。 – Ozgur
如果我在一个星期内没有得到更好的答案,我会按你的方式选择你的答案。谢谢! – Jan