2011-08-11 7 views
2

初めて彼がアプリケーションを開いてSharedPreferencesオブジェクトに保存するときにユーザーのユーザー名とパスワードを保存します。 2回目の入力時にデータをチェックし、ヌルでない場合はアプリに入ります。ここで私はこれをやっている方法です:
共有環境設定android基本的な質問

private SharedPreferences dhj; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dhj = this.getSharedPreferences("DHJ", MODE_WORLD_READABLE); 
    if(dhj.getString("username", null) != null) { 
     setContentView(R.layout.main); 
      // do some stuff... 
    } 
    else { 
      setContentView(R.layout.login); 
      username = (EditText) findViewById(R.id.username); 
      password = (EditText) findViewById(R.id.password); 
        loginButton = (Button) findViewById(R.id.loginButton); 

      loginButton.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        SharedPreferences.Editor dhjEditor = dhj.edit(); 
        dhjEditor.putString("username", username.getText().toString()); 
        dhjEditor.putString("password", password.getText().toString()); 
        setContentView(R.layout.main); 
       } 
      }); 
        // do some other stuff... 
    } 
} 

しかし、私はアプリを開くたびに、私は、ユーザー名とパスワードを入力するよう求められています。
私が間違って何をしているのですか?どのようにして目的の機能を達成できますか?
ありがとうございます。

+0

パスワードとユーザー名を保存するコードを投稿できますか? –

+0

どのようにユーザー名/パスワードを環境設定に保存していますか? – binnyb

+4

あなたはSharedPreferencesにユーザー名とパスワードを保存していませんでしたか?あなたの問題はおそらくあなたの呼び出しではありません.commit(); – Blundell

答えて

1

環境設定を変更した後で、エディタのcommitメソッドを呼び出す必要があります。

SharedPreferences.Editor dhjEditor = dhj.edit(); 
dhjEditor.putString("username", username.getText().toString()); 
dhjEditor.putString("password", password.getText().toString()); 
dhjEditor.commit(); 
+0

ありがとうございます。ちなみに、ユーザーが既にログイン情報を正しく入力したかどうかを確認するコードはありますか? – Brahadeesh

+0

はうまく見えますが、ユーザーが何も入力せずにログインボタンをクリックすると、ログインしているように見えますが、空の文字列はユーザ​​ー名/パスワードとして保存されます。あらかじめ – binnyb

+0

ohに設定する前にいくつかの検証をしたいかもしれません。ありがとうございました。それを行います。 – Brahadeesh

2

"getSharedPreferences" のドキュメントは言う:

理想の環境設定ファイルこれは、設定ファイルを保存します。この名前の環境設定ファイルが存在しない場合、エディタ(SharedPreferences.edit())を取得して変更をコミットすると(Editor.commit())作成されます。

コミットする前にすべての書き込みに同じエディタを使用してください。

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

editor.commit()関数は、ファイルシステム操作を実行する同期関数です。残念な状況では、ファイルシステム操作がストールしてメインスレッドをブロックする可能性があるため、メインスレッド(コードがメインスレッドで実行されているように見える)をANRをスローする可能性があります。

代わりに関数を使用します。これは共有された環境設定のメモリ内キャッシュをただちに更新してワーカースレッドを作成し、共有設定ファイルにその値を書き込みます(ワーカースレッドはブロックしませんメインスレッド)。

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()