2017-04-04 3 views
0

ユーザー名を返すstartActivityForResultがあります。 onActivityResultの中のこのコードは、それを返すログ関数によって示されているように、新しいユーザ名を返しています。startActivityForResultは正しい結果を返しますが、nullになります。

// return user initials from popup 
setUsername(intent.getStringExtra("USERNAME")); 
Log.d("ME", "Username is now :" + getUsername()); //returning the real result 

結果が戻っMainActivityに来た後、私は)getUsername(から読み込む共有設定機能を持っています。

SharedPreferences sp = getPreferences(Context.MODE_PRIVATE); 
     setUsername(sp.getString("USERNAME", "")); 

これが唯一の代わりにsetUsername()に書き込まれることになったものの""を返しています。参考のために、私の方法は次のとおりです。

private void setUsername(String name) { 
    username = name; 
} 

private String getUsername() { 
    return username; 
} 

// called during onDestroy() 
void write() { 
    SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit(); 
    editor.putString("USERNAME", getUsername()); 
    editor.putBoolean("FIRST_RUN", firstRun); 
    editor.apply(); 
} 

// called during onStart() 
void read() { 
    SharedPreferences sp = getPreferences(Context.MODE_PRIVATE); 
    setUsername(sp.getString("USERNAME", "")); 
    firstRun = sp.getBoolean("FIRST_RUN", true); 
} 

そして、他のクラスでは、私はこれで共有好みにユーザー名を書いている:

private void write() { 
    SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit(); 
    editor.putString("USERNAME", etInitials.getText().toString()); 
    editor.apply(); 
} 
+0

あなたが私たちに示したコードでは書き込みをしていないので、実際には共有設定に入れていません。 –

+0

read()とwrite()がいつ – DevJem

答えて

1
SharedPreferences sp = getPreferences(Context.MODE_PRIVATE); 
    setUsername(sp.getString("USERNAME", "")); 

2番目のラインが設定されていることを実感しますあなたが設定した名前を得るのではなく、値の権利です。

void write() { 
SharedPreferences.Editor editor = getPreferences(Context.MODE_PRIVATE).edit(); 
editor.putString("USERNAME", getUsername()); 
editor.putBoolean("FIRST_RUN", firstRun); 
editor.apply(); 
} 

上記の方法は、「他のクラスは」onDestroy中にwriteメソッドを呼び出している、主な活動のonActivityResultが最初に呼び出されると仮定すると、このintent.getStringExtra("USERNAME")

+0

と呼ばれるのかを明確にするために編集しました。あなたは書き込みを呼び出さないので、デフォルトの文字列の値は常に空です。 – Remario

+0

これを設定する前に、最初に値を取得しています。これを実証するために、設定値で変数を宣言して、もう一度試してみてください。 – Remario

+0

私は 'onStart()'の間に 'read()'を呼び出しています。共有プリファレンスは、結果のアクティビティをプルアップするまでに完了する必要があります。私は別個の価値を試し、それが欠陥を引き起こしているかどうかを見ます。 – DevJem

1

で、最初に呼び出される必要があります。

OtherActivity >>> onPause 
MainActivity >>> onActivityResult 
MainActivity >>> onRestart 
MainActivity >>> onStart 
MainActivity >>> onResume 
MainActivity >>> onPostResume 
OtherActivity >>> onStop 
OtherActivity >>> onDestroy 
+0

操作のご注文ありがとうございます。これは、 'onActivityResult'フェーズ中の環境設定への書き込みの他の答えを明確にしました。 – DevJem

関連する問題