2016-11-30 3 views
0

にユーザー状態を維持私がログインプロセスとアプリ、IユーザーがログインがこのようなLoginHolderクラスに情報を格納するたびに持っている:あなたが見ることができるようにメモリ

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

}

をこれは、私がDaggerを使用して注入しているシングルトンクラスです。

私は2つのアクティビティを持っています.1つはアクティビティAで、もう1つはアクティビティBです。アクティビティBを起動します(概念的には親、マスターディテール関係の一種です)。 Bでクラッシュが発生すると、Aアクティビティが再作成されます。私はロギングを確認して、実際にはアプリケーション全体が再作成されます(Applicationオブジェクトまで)。これにより、シングルトンが去るため、ユーザー情報も消えます。

これまでのところ、私は唯一の私は、これは他のケースと同様に、予想外に起こるかもしれない恐怖(任意のアイデア?)

を、私はすべての回でメモリ内にこの情報を保存するにはどうすればよい(ユーザーまでが、この場合には、それを再現することができもちろんログアウトしますか?)

+0

で簡単なSHaredPreferenceを使用しています。 –

+1

「これはどのように可能ですか? - 'mUserInfo'には決して値が割り当てられないので、常に' null'になります。もちろん、ここにあなたの 'LoginHelper'コードをすべて表示していない限りはありません。その場合、あなたのコードが参照するものが何であるか分からず、 'mUserInfo'を操作することができないので、私たちは本当に助言することはできません。 – CommonsWare

+0

@CommonsWareは、私は、全体のコードを投稿didntは、右のthats、私は実際には、私のアプリのすべての画面は、このクラスに依存ゲッター&セッター – MichelReap

答えて

0

どのようにしてこの情報を常にメモリに保存できますか?

拡張クラスよりもアプリケーションクラスを作成し、そのクラスの中にLoginDetailsを定義します。

この場合、この値はアプリのライフサイクル全体にわたってメモリに残ります。

例:

public class MyApplication extends Application { 

    private static MyApplication instance; 
    private LoginDetails loginDetails; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
    } 

    public static LoginDetails getLoginDetails() { 
     return instance.loginDetails; 
    } 
    public static void setLoginDetails(LoginDetails loginDetails) { 
     instance.loginDetails = loginDetails; 
    } 
} 

そして、あなたのマニフェスト

<application 
    android:name=".MyApplication" 
    ..... 
</application> 
+0

これは私がやっていることですが、Applictionオブジェクトも再作成されています。更新された質問を確認してください。 – MichelReap

+0

このデータを保持する必要があります。 SharedPreferencesの使用はオプションです。 – Manza