2

Eclipseで構築しているAndroid用のGingerbread2.3.3アプリケーションに3つのアクティビティがあります。

1)MainActivity --- 2つのオプション、LoginActivityに移動するか、HomeScreenActivityに直接移動します

2)LoginActivity---ログイン資格情報(別名ユーザー名とパスワード)を入力し、検証してから、SharedPreferencesに保存します。検証に成功すると、HomescreenActivityに移動します。LoginActivityのSharedPreferencesセクションにあるものは次のとおりです。

public static final String PREFS_FILE = "MY_PREFS";

SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_PRIVATE);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("USERNAME", getUsername());
                editor.putString("PASSWORD", getPassword());
                editor.commit();

3)HomescreenActivity---TextViewの右上隅に現在ログインしているユーザーを表示する基本的なホーム画面。このため、私のonResume()には次のものが含まれています。

public static final String PREFS_FILE = "MY_PREFS";

SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_PRIVATE);
TextView name_text = (TextView) findViewById(R.id.name_text_vw);
name_text.setText(prefs.getString("USERNAME", "");

LoginActivityとログインを使用すると、のTextViewにユーザー名が正しく表示されHomescreenActivityます。ただし、アプリケーションを終了し、アクティビティをスタックから削除するために他の処理を行う場合は、アプリケーションに戻り、直接自分の場所に移動してHomescreenActivity、ユーザー名が既にログインしていることを確認します。しかし、これは起こりません。誰かが理由を知っていますか?SharedPreferencesは、アプリケーションを終了した後でも設定とデータを保存する方法だと思いました。たぶん私は正しいモードを使用していません-別名MODE_WORLD_READABLEまたはMODE_WORLD_WRITABLE

4

2 に答える 2

4

アクティビティ用の共有設定と、アプリ用の共有設定があります。アクティビティ設定を使用している可能性があります。

プリファレンスに保存するには:

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYLABEL",
      "myStringToSave").commit();  

保存された設定を取得するには:

PreferenceManager.getDefaultSharedPreferences(context).getString("MYLABEL",
     "defaultStringIfNothingFound"); 

コンテキストはあなたのコンテキストです。

于 2012-08-24T19:48:56.677 に答える
0

あなたの特定の質問に対する答えがわかりません。getSharedPreferences が静的ではなく、Context のメソッドであるためだと思われます。したがって、 commit() が実際にストアに書き込むタイミングを制御することはできません。ただし、別のアプローチをお勧めします。

アプリケーションを拡張するカスタム クラスで静的参照を使用します。

public class MyApp extends Application

{ 

    protected static SharedPreferences preferences;

    public static void loadPreferences(Context context) {

       // load your preferences

    }


    public static void savePreferences(Context context) {


      // save your preferences

    } 

MyApp.preferences からアクセスできます。

Application クラスをマニフェストに追加することを忘れないでください。

幸運を!

于 2012-08-24T19:37:49.883 に答える