2

共有設定に非常に奇妙な問題があります。ユーザーIDやさまざまな設定などを保存するためにそれらを使用しています。ユーザーがメニューの項目をクリックした場合にフラグメントを切り替えるアクティビティを使用しています ( Menu-Drawerを使用しています)。

ログインするたびに、ユーザープロファイルを保存します。これは完璧に機能します。これを行った後、アプリを再起動してメモリから強制終了できます。デバイスを再起動しても、値は引き続き保存されます。しかし、フラグメントを切り替えると、たとえば、ホーム ビューでメニューの [アプリについて] をクリックすると、すべてが消えてしまいます。私の価値観は空です。

さらに奇妙なことに、すでにホームビューにいる間にホームアイテムを選択してアクティビティにフラグメントを強制的にリロードさせると、フラグメントはまだ保存されています。それを別のタイプのフラグメントに置き換えた場合にのみ、すべてが失われます。

アプリがこのように動作する理由がわかりません。それはすべて、同じコンテキストの同じアクティビティにあります。私は常に getActivity を使用して、フラグメント内のコンテキストを取得しています。

これを保存するコードの簡略化されたスニペットを次に示します。

public static void storeUserProfile(Context context, LoginEvent event, String userId, String emailAddress, String passwordHash) {

    SharedPreferences userPrefs = context.getSharedPreferences(AppConfig.USER_PREFS, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = userPrefs.edit();
    editor.clear();

    editor.putString("username", event.userName);
    editor.putString("id", userId);
    editor.putString("email", emailAddress);

    editor.commit();
}

これは、フラグメントを切り替える方法です。

HomeFeedFragment fragment = new HomeFeedFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();
4

5 に答える 5

1

getSharedPreferences()フラグメントを使用すると、のみで は機能しませんPreferenceManager.getDefaultSharedPreferences (getActivity ());

于 2016-02-13T01:50:35.513 に答える
0

迅速な対応ありがとうございました!私は自分でエラーを見つけました。about ビューについては、共有設定にも保存される html ファイルを読み込んでいます。sharedpreferences が単なる xml ファイルであるという事実については考えていないので、html 文字列が xml ファイルを無効にしたと思います。

my prefs.getString(key, defaultValue)defaultValue を返していないことに気付きました。空の文字列を返していました。そのため、html の保存を削除し、別の方法でこれを行います。

でもコメントありがとうございます!

于 2013-07-15T08:55:28.247 に答える