0

ボタンをクリックした後、一部の情報がSharedPreferencesに保存されてから次のアクティビティに進むまで待つ必要があります。 SharedPreferences.OnSharedPreferenceChangeListener()を使用しようとしましたが、正しく動作しません。変更をコミットSharedPreferencesで保存コールバック

MapActivity

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (currentPosition != null) { 
        SharedPreferences preferences = PreferenceHelper.getPreferences(MapActivity.this); 
        SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
         @Override 
         public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
          Log.i(TAG,"key "+key); 
          Intent i = new Intent(MapActivity.this, MainActivity.class); 
          i.putExtra("coordinates", currentPosition); 
          i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
          startActivity(i); 
         } 
        }; 
        preferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener); 
        PreferenceHelper.saveLocation(MapActivity.this,currentPosition); 
       } 
      } 
     }); 

PreferencesHelper

public class PreferenceHelper { 
       public static SharedPreferences appPreference; 

       public static SharedPreferences getPreferences(Context context){ 

       return context.getSharedPreferences(PREFERENCES_NAME,Context.MODE_PRIVATE); 
      } 

       public static void saveLocation(Context context,LatLng location){ 
        appPreference=context.getSharedPreferences(PREFERENCES_NAME,Context.MODE_PRIVATE); 
       SharedPreferences.Editor editor = appPreference.edit(); 
       editor.putFloat(CURRENT_LOCATION_X, (float) location.latitude).apply(); 
       editor.putFloat(CURRENT_LOCATION_Y, (float) location.longitude).apply(); 
       editor.commit(); 
      } 

      } 
+0

rは? – Bahu

+0

はい、私はその方法を試してください – Expiredmind

答えて

1

は、メインスレッドで起こるものです...あなたはOnSharedPreferenceChangeListenerは必要ありません。変更リスナーは、変更をコミットしたものではなく、アプリケーションの他のコンポーネントからコミットされた共有設定の変更について通知を受けたい場合に便利です。ただ、やる:uはSharedPreferences.OnSharedPreferenceChangeListenerの上部にPreferenceHelper.saveLocatioを挙げてみました

prefs.edit().putWhatever().commit(); 
startActivity(new Intent(....)); 
+0

私はOnSharedPreferenceChangeListenerなしでコードをテストして、アンドロイド6.0で正常に動作しますが、古いもの(4.2)には問題があります(前回の節約のデータが必要です。 )。 – Expiredmind

+1

あなたが始まった活動が「重い」ために起こる可能性があります。 2つの浮動小数点値を保存することは、そのような魅力を持つことはできません。あなたの設定ファイルが非常に大きくなっていない限り、保存するのに多くの時間が必要です。どのような場合には何か間違ったことをしているため、データを別の方法で保存する必要があります。データベース – Anonymous

関連する問題