2013-03-03 26 views
8

にsharedpreferencesを忘れて、私は アプリケーションは、再起動

は、Android 3.0以降で細かい動作しているようだ、それ以上が、アンドロイド2.3.3にするたびに、私はそれがあるアプリケーションを起動し、それをどうするのか分からない続けます再度ユーザ名/パスワードを尋ねる。

私は共有の設定を使用しています。ここで

は私が設定を保存する方法である:

 SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", MODE_PRIVATE); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString("username", username).commit(); 
     editor.putString("password", password).commit(); 

そして、ここでは、私はそれらを読む方法です:

SharedPreferences preferences = MyApplication.getAppContext().getSharedPreferences("athopbalance", Context.MODE_PRIVATE); 
    String username = preferences.getString("username", ""); 
    String password = preferences.getString("password", ""); 

また、私はこのコードを使用して設定を保存しようとした:

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext()); 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putString("username", username).commit(); 
     editor.putString("password", password).commit(); 

そして、次のコードを読んでください:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext()); 
    String username = preferences.getString("username", ""); 
    String password = preferences.getString("password", ""); 

でも動作しません。

問題は、アプリケーションを再起動する前に、問題がまだ存在することがわかります。しかし、私が再起動するとすぐに、私はusernameに ""(空の文字列)を、パスワードには ""を得ることになります。

任意のアイデアを大幅に

答えて

0

何が起こったのか正確にはわかりませんが、再起動後にエミュレータの問題は解消されました。

お時間

+0

ここで同じ問題が起きました。本当に奇妙な... – Victor

1

これを試してみていただければ幸いです。

コンテキストがあなたのアプリケーションのコンテキストで
SharedPreferences preferences = context.getSharedPreferences("YOUR_TAG", 0); 
String username = preferences.getString("username", ""); 
String password = preferences.getString("password", ""); 


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

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


     context = this; 
+0

こんにちは、あなたのコメントのためにどうもありがとうございました。私は最初の例ではかなり同じことをしていますが、それはうまくいきません –

+0

MyApplicationの代わりにあなたのアクティビティを試してみてください。 – Gyonder

+0

私はアクティビティからコンテキストを渡すのではなく、getApplicationContext()を呼び出していました。 –

2
public class MyApplication extends Application { 
    private static MyApplication instance; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.d(TAG, "onCreate() called"); 
    } 

    public MyApplication() { 
     super(); 
     Log.d(TAG, "Constructor called"); 
     instance = this; 
    } 


    public static MyApplication getApplication() { 
     if (instance == null) { 
      instance = new MyApplication(); 
     } 
     return instance; 
    } 
} 

と使用方法:

MyApplication.getApplication().getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE) 
+0

あなたの例では、新しい「MyApplication」をインスタンスに保存しておかないので、キャッシングは起こりません。 – mikebabcock

+0

ありがとう、私はそれを行ってみましょう –

+0

mikebabcockによって指摘された問題を修正しました。ありがとう! – agamov

関連する問題