保存异步改装响应

时间:2016-10-21 15:04:23

标签: android asynchronous retrofit2

我正在使用retrofit:2.1.0并且我正在尝试保存返回到我自己的POJO(UserProfile)的响应,但我似乎无法访问POJO,我在回调之外分配响应

因此,在下面的此次通话中,我希望能够在此次通话之外访问 UserProfile

//adding `UserProfile userProfile;` outside of Call didn't help either

call.enqueue(new Callback<UserProfile>() {
    @Override
    public void onResponse(Call<UserProfile> call, Response<UserProfile> response) {
       if (response.isSuccessful()) {
          UserProfile userProfile = response.body();
       }
    }

    @Override
    public void onFailure(Call<UserProfile> call, Throwable t) {
         //do something
    }
});

//这里userProfile为null,因此无法获取状态 Log.d(TAG,&#34; Call之外的状态是:&#34; + userProfile.getStatus());

新方法,结果相同

private List<UserProfile> userProfileList = new ArrayList<>();

call.enqueue(new Callback<UserProfile>() {
    @Override
    public void onResponse(Call<UserProfile> call, Response<UserProfile> response) {
       if (response.isSuccessful()) {
          UserProfile userProfile = response.body();
          userProfileList.add(userProfile);
       }
    }

    @Override
    public void onFailure(Call<UserProfile> call, Throwable t) {
         //do something
    }
});

这个甚至在回调之前被解雇,因此是空的

if(userProfileList.size() > 0) {
     for(UserProfile userProfile : userProfileList) {
        Log.d(TAG, "Status is: " + userProfile.getStatus());
     }
} else {
     Log.d(TAG, "YakkerProfileList is NULL");
}

1 个答案:

答案 0 :(得分:0)

我在onResponse()中添加了一个setter,它允许我在代码中的其他位置使用响应对象,如下所示:

@Override
public void onResponse(Call<UserProfile> call, Response<UserProfile> response) {
    if (response.isSuccessful()) {
        UserProfile userProfile = response.body();
        //elsewhere in the code, I can read the value from this method
        setUserProfile(userProfile.getStatus());
    }
 }