2016-10-21 2 views
0

Ich benutze retrofit:2.1.0 und ich versuche, die Antwort zu meinem eigenen POJO (UserProfile) zu speichern, aber ich kann nicht auf den POJO zugreifen, ich zuweisen die Antwort, außerhalb der Rückrufe.Speichern asynchrone Retrofit-Antwort

Also, in diesem Anruf unten möchte ich Zugriff auf UserProfile außerhalb dieses Anrufs haben.

//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 
    } 
}); 

// hier Userprofile null ist und daher nicht Status Log.d erhalten (TAG, "Status außerhalb des Call ist:" + userProfile.getStatus());

Neuer Ansatz, das gleiche Resultat

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 
    } 
}); 

Und dieser wird noch vor Rückruf gefeuert und ist daher null

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

"Ich kann scheinbar nicht auf das POJO zugreifen, ich weise die Antwort außerhalb der Rückrufe zu." - Was genau willst du machen? Haben Sie einen Fehler? –

+0

* Wenn * versuchen Sie auf das 'UserProfile' zuzugreifen? Wenn Sie versuchen, darauf zuzugreifen, bevor der Rückruf ausgelöst wird, wird 'null' zurückgegeben. – Bryan

+0

Ja, außerhalb des "Anrufs" kann ich nicht einmal auf 'UserProfile' zugreifen. Ich habe versucht, eine Instanz von 'UserProfile' zu ​​erstellen und dann' userProfile = response.body() 'aufzurufen und wenn ich einen Getter mache:' Log.d (TAG, "Benutzerstatus außerhalb von Call ist:" + userProfile.getStatus()); ' –

Antwort

0

ich einen Setter in onResponse() hinzugefügt, die mir erlaubt, zu verwenden, das Antwortobjekt an anderer Stelle im Code wie folgt:

@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()); 
    } 
}