3

私のアプリケーションでは、認証されたユーザーに関連する情報を維持するためにアプリケーションクラスを拡張します。ただし、バックグラウンドプロセスを許可せず、別のアプリケーションを開いて(つまり、マインを強制終了して)、マインを再度開いたいくつかのテストを実行した後、この状態が失われている(変数がデフォルト値に戻っている)ことに気付きました。Applicationクラスには、アクティビティのようにonCreate以外にライフサイクルのコールバックがないことに気付きました。これは、エレガントなソリューションになると思いました。そこで、この情報をSharedPreferenceに書き込んで、必要なときに復元できるようにすることにしました。これは正しい解決策ですか、それとももっとエレガントな解決策がありますか?

参照用の関連サンプルコード:

public class ApplicationUser extends Application {

    private static final String PREF_KEY_USER = "prefKeyUser";
    private static final String PREF_KEY_ID = "prefKeyID";
    private static final String PREF_KEY_FIRST_NAME = "prefKeyFirstName";
    private static final String PREF_KEY_LAST_NAME = "prefKeyLastName";
    private static final String PREF_KEY_EMAIL = "prefKeyEmail";

    private User mUser;
    private SharedPreferences mSharedPreferences;


    @Override
    public void onCreate() {
    super.onCreate();
        mSharedPreferences = getSharedPreferences(PREF_KEY_USER,MODE_PRIVATE);
    }

    /**
     * 
     * @return the user
     */
    public User getUser() {
        if (mUser == null) {
            int id = mSharedPreferences.getInt(PREF_KEY_ID, -1);
            String firstName = mSharedPreferences.getString(PREF_KEY_FIRST_NAME, "");
            String lastName = mSharedPreferences.getString(PREF_KEY_LAST_NAME, "");
            String email = mSharedPreferences.getString(PREF_KEY_EMAIL, "");
            mUser = new User(id, firstName, lastName, email);
        }
        return mUser;
    }

    /**
     * sets user, writing to shared preferences as well
     * @param user
     */
    public void setUser(User user) {
        mUser = user;
        Editor e = mSharedPreferences.edit();
        e.putInt(PREF_KEY_ID, user.getID());
        e.putString(PREF_KEY_FIRST_NAME, user.getFirstName());
        e.putString(PREF_KEY_LAST_NAME, user.getLastName());
        e.putString(PREF_KEY_EMAIL, user.getEmail());
        e.commit();
    }
}
4

1 に答える 1

0

私のやり方は正しい方法だったようですので、これを答えとして追加します。これが間違った手順である場合は、私を訂正してください。

于 2013-01-22T19:57:04.987 に答える