我有一个 Restful API,它会为我返回一个 Java 对象。当返回该对象时它仍然是空的,因为异步线程仍在工作。如何获得该响应然后返回到我的 Presenter 并将正确的响应指向 View ?
这是我的改造电话:
public String checkUser(final ModelUser modelUser) throws IOException {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(UserRetrofitAPI.BASE_SERVICE)
.addConverterFactory(GsonConverterFactory.create())
.build();
UserRetrofitAPI userRetrofitAPI = retrofit.create(UserRetrofitAPI.class);
Call<ModelUser> requestCheckUser = userRetrofitAPI.checkUser(modelUser.getUser(), modelUser.getPassword());
requestCheckUser.enqueue(new Callback<ModelUser>() {
@Override
public void onResponse(Call<ModelUser> call, retrofit2.Response<ModelUser> response) {
if(!response.isSuccessful()){
myModelUser = new ModelUser(modelUser.getUser(),modelUser.getPassword(), String.valueOf(response.code()));
} else {
ModelUser modelUserChecked = response.body();
myModelUser = modelUserChecked;
}
}
@Override
public void onFailure(Call<ModelUser> call, Throwable t) {
Exception ex = new Exception(t);
myModelUser = new ModelUser(modelUser.getUser(), modelUser.getPassword(), ex.toString());
}
});
return myModelUser.getResponse();
}
当我进行此调试时,它通过处理时间起作用。
帮帮我?
最佳答案
You shouldn't return that directly.
正如您提到的,Retrofit 响应在后台线程中更新。
我建议只返回 requestCheckUser
并在你的 Presenter 中观察它
public Call<ModelUser> checkUser(final ModelUser modelUser) throws IOException {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(UserRetrofitAPI.BASE_SERVICE)
.addConverterFactory(GsonConverterFactory.create())
.build();
UserRetrofitAPI userRetrofitAPI = retrofit.create(UserRetrofitAPI.class);
Call<ModelUser> requestCheckUser = userRetrofitAPI.checkUser(modelUser.getUser(), modelUser.getPassword());
return requestCheckUser;
}
在Presenter中观察该调用的响应,并执行如下所需操作
checkUser(modelUser).enqueue(new Callback<ModelUser>() {
@Override
public void onResponse(Call<ModelUser> call, retrofit2.Response<ModelUser> response) {
if(!response.isSuccessful()){
myModelUser = new ModelUser(modelUser.getUser(),modelUser.getPassword(), String.valueOf(response.code()));
} else {
ModelUser modelUserChecked = response.body();
myModelUser = modelUserChecked;
}
}
@Override
public void onFailure(Call<ModelUser> call, Throwable t) {
Exception ex = new Exception(t);
myModelUser = new ModelUser(modelUser.getUser(), modelUser.getPassword(), ex.toString());
}
});
这将是简单选项,并将满足此用例和范围。 如果您不喜欢在 Presenter 中编写观察者,则可以使用自定义界面监听器。
我建议查看 RxJava 并将其与 Retrofit 一起使用 以将其转换为更易于维护的代码
关于android - 如何从 Retrofit2 调用 OnResponse 返回 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51341039/