Несколько общих настроек не сохраняют / не отображают данные - PullRequest
0 голосов
/ 17 мая 2018

Я довольно долго искал, но безрезультатно, так как до сих пор не знаю, почему это не работает.

Я уже использую SharedPreference между одним действием и другим

Код:

Сохранение данных

  SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = preferences.edit();

    editor.putString("email", email.getEmail().toString());
    editor.apply();

Получение данных

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    String userEmail = preferences.getString("email", "defaultValue");

    DisplayEmail.setText(userEmail);

Этот код работает нормально. Но теперь, когда мы переходим к другому общему предпочтению, это происходит:

java.lang.RuntimeException: невозможно запустить действие. ComponentInfo {com.example.nathan.application / com.example.nathan.application.ActCamera}: java.lang.IndexOutOfBoundsException: индекс: 0, размер: 0 на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2796) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2867) на android.app.ActivityThread.-wrap12 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1570) на android.os.Handler.dispatchMessage (Handler.java:105) на android.os.Looper.loop (Looper.java:156) на android.app.ActivityThread.main (ActivityThread.java:6595) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:942) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:832) Вызывается: java.lang.IndexOutOfBoundsException: индекс: 0, размер: 0

Код из-за этой ошибки:

 double Latitude = loc.getLatitude();
            double Longitude = loc.getLatitude();

            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            SharedPreferences.Editor editor = preferences.edit();


            editor.putString("Country", details.doInBackground().toString());
            editor.putLong("Latitude", Double.doubleToRawLongBits(Latitude));
            editor.putLong("Longitude", Double.doubleToRawLongBits(Longitude));

            editor.apply();


 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

    Latitude = Double.longBitsToDouble(preferences.getLong("Latitude", 0));
    Longitude = Double.longBitsToDouble(preferences.getLong("Longitude", 0));

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Multiple Shared Preference без сохранения / отображения данных

Это называется multiprocess app , где вы определяете два или болеепроцесс в манифестном классе .В настоящее время не существует способа безопасного доступа к SharedPreferences в нескольких процессах, как описано в его документации 1013 *.

Решение:

Вы будете использовать лоток для библиотеки баз данных вместо SharedPreference, если вы хотите работать с многопроцессорностью.

https://github.com/grandcentrix/tray

0 голосов
/ 17 мая 2018

Были случаи, когда getDefaultSharedPreferences не работал должным образом в разных контекстах приложения.

Я бы порекомендовал вам использовать:

Context mContext = getApplicationContext();
SharedPreferences preferences = mContext.getSharedPreferences("your_shared_preferences_name", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
...