2016-12-30 21 views
0

私のアプリケーションはアプリの起動時にサービスを呼び出しています。アプリで共有設定の更新値がサービスに反映されていません

、私は与えられたキーと値のペアの値

SharedPreferences.Editor editor = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE).edit(); 
    editor.putString("key",value); 
    editor.apply(); 

を更新していると私はサービス

SharedPreferences preferences = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE); 
String key = preferences.getString("key",null); 

が、サービスは常に表示されますから、それを取得しようとしています古いキー値つまり、値はアプリの起動またはサービスの再起動後に反映されます。

サービスまたはアプリケーションを再起動せずにサービスで更新された値を取得するにはどうすればよいですか?

前述のようにhere共有設定は複数のプロセスにわたって機能しません。他の選択肢はありますか?

答えて

0

としては、だから、瞬時に変更が反映されません

Note: This class does not support use across multiple processes.

hereを述べました。

0

環境設定の更新を待ち受けるには、OnSharedPeferencesChangeListenerが必要です。 古い値を表示しているのは、更新されていない(コードの行が呼び出されていない)ためです。イベントを更新するには、イベントをトリガーする必要があります。

SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(this); 

prefs.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() { 
    public void onSharedPreferenceChanged(
     SharedPreferences prefs, String key) { 

     String key = prefs.getString("key",null); 
    } 
});` 

EDIT:あなたはSharedPreferences.OnSharedPreferenceChangeListenerオブジェクトに対する強い参照を必要としています。例here

+0

任意のタイミングでリスナーを呼び出しません。 –

+0

この行を変更してください。 'SharedPreferences prefs = getSharedPreferences(getString(R.string.shared_preferences_name)、MODE_PRIVATE);' –

+0

これも試してみました。まだ電話しません。 –

関連する問題