1

SharedPreferences の使用に少し問題があります。環境設定との間で文字列を保存し、後でロードしたいと考えています。onCreate メソッドで環境設定を初期化します。

prefs = this.getSharedPreferences("com.example.android_test", Activity.MODE_PRIVATE);

別の方法で保存します:

    public void saveUser()
    {   
        prefs.edit().putString("username", username);
        prefs.edit().putString("password", password);
        prefs.edit().apply();
    }

さらに別の方法でロードします。

    public void loadUser()
    {
        username = prefs.getString("username", "default");
        password = prefs.getString("password", "test");
    }

そして、それらは私のテスト方法です:

    public void showUser(View v) 
    {
       loadUser();
       text.setText(username);
    }

    public void addUser(View v)
    {
        changeUser(eingabe.getText().toString(),"newpass");
    }

    public void changeUser(String user, String pass)
    {
        username = user;
        password = pass;
        saveUser();
    }

ユーザー名とパスワードはグローバルでプライベートな文字列、eingabe は EditText、テキストは TextView です。ただし、showUser() を実行すると、異なるユーザー名で saveUser を使用している場合でも、TextView に表示される defaultvalue のみが取得されます...クラッシュなどはありません...表示されるのは defaultvalue だけです...

4

3 に答える 3

8

編集をコミットするのを忘れました:

prefs.edit().putString("username", username).commit();
于 2013-04-11T11:51:17.820 に答える
3
 prefs.edit().putString("username", username);
 prefs.edit().putString("password", password);

これを毎回変更すると異なるeditインスタンスが返されるため、変更がコミットされません。

Editor editor = prefs.edit();
editor.putString("username", username);
editor.putString("password", password);
editor.commit();

これを試して。

設定を永続ストレージに同期的に書き込む commit() とは異なり、apply() は変更をメモリ内の SharedPreferences にすぐにコミットしますが、ディスクへの非同期コミットを開始するため、失敗は通知されません。この SharedPreferences の別のエディターが通常の commit() を実行し、apply() がまだ未解決の場合、commit() はすべての非同期コミットとコミット自体が完了するまでブロックされます。

于 2013-04-11T11:51:42.973 に答える
1

OK、 apply は commit と同じです。設定をアトミックに書き込むだけで、スレッドセーフになります。(ただしAPIレベル9が必要なので注意)

ドキュメントを見る

問題は、Rajesh CP の発言です。エディター ポインターを作成してから適用する必要があります。

Editor editor = prefs.edit();
editor.putString("username", username);
editor.putString("password", password);
editor.apply();

それ以外の場合、エディターの新しいインスタンスを作成するたびに、変更を適用するときに、変更を適用するように指示されているエディターには変更がありません。

于 2013-04-11T11:58:50.697 に答える