Ich habe eine App mit einem Login-Prozess, jedes Mal der Benutzer anmeldet ich die Informationen in einer LoginHolder Klasse speichern wie folgt aus:Keeping Benutzerstatus im Speicher
private static final java.lang.String TAG = tag(LoginHolder.class);
private static LoginHolder INSTANCE;
private SharedPreferences mSharedPreferences;
private LoginDetails mLoginDetails;
private UserInfo mUserInfo;
private LoginHolder(SharedPreferences sharedPreferences) {
mSharedPreferences = sharedPreferences;
}
public synchronized static LoginHolder instance(SharedPreferences prefs) {
if (INSTANCE == null) {
INSTANCE = new LoginHolder(prefs);
}
return INSTANCE;
}
public LoginDetails getLoggedUser() {
return mLoginDetails;
}
@DebugLog
public void setLoggedUser(@NonNull LoginDetails loginDetails) {
this.mLoginDetails = loginDetails;
}
@DebugLog
void setUserInfo(@NonNull UserInfo userInfo) {
mUserInfo = userInfo;
}
public UserInfo getUserInfo() {
return mUserInfo;
}
}
Wie Sie sehen können Dies ist eine Singleton-Klasse, die ich mit Dolch injiziere.
Jetzt habe ich zwei Aktivitäten, eine ist Aktivität A und zweite ist Aktivität B. A startet Aktivität B (und konzeptionell ist seine Eltern, eine Art Master-Detail-Beziehung). Wenn nun bei B ein Absturz auftritt, wird die A-Aktivität neu erstellt. Ich habe das mit Logging überprüft und tatsächlich wurde die ganze App neu erstellt (bis auf das Application-Objekt). Dies bewirkt, dass der Singleton weggeht und somit auch die Benutzerinformation.
Bisher habe ich es nur in diesem Fall reproduzieren könnte, aber ich fürchte, das auch unerwartet in anderen Fällen geschehen könnte (irgendwelche Ideen?)
Wie kann ich jederzeit mit diesen Daten im Speicher erhalten (bis dem Benutzer loggt sich natürlich aus)?
Gebrauch einfach SHaredPreference. –
"Wie ist das möglich?" - Da "mUserInfo" niemals einen Wert zugewiesen bekommt, ist es immer "null". Es sei denn natürlich, Sie zeigen hier nicht Ihren 'LoginHelper' Code. In diesem Fall können wir Sie nicht wirklich beraten, da wir keine Ahnung haben, was Ihr Code ist, der mUserInfo referenziert und manipuliert. – CommonsWare
@CommonsWare das ist richtig, ich habe nicht den ganzen Code, ich habe es nur die Getter und Setter – MichelReap