SharedPreferences по всему приложению не хранит значения - PullRequest
0 голосов
/ 01 мая 2020

Я использую SharedPreferences по всему своему приложению.

Я определяю их два типа. Один называется:

public static String MISDATOS= "MisDatos";
SharedPreferences prefs2 = getActivity().getSharedPreferences(MISDATOS, Context.MODE_PRIVATE);

, а другой называется:

public static String MIPACIENTE= "MiPaciente";
 SharedPreferences prefs3 = getActivity().getSharedPreferences(MIPACIENTE, Context.MODE_PRIVATE);

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

Я обнаружил проблему, которая в настоящее время сводит меня с ума.

Есть фрагмент 1, фрагмент 2 .... фрагмент 10.

мою проблему легче понять, я приведу пример.

Существует один из элементов sharepreferences, который называется:

Integer hayFotos =  prefs3.getInt("hayFotos",0);

Чтобы следовать последовательности, при запуске приложения ее значение равно 0

При первом запуске фрагмента 1 его значение, очевидно, равно 0.

Во фрагменте 1 пользователь делает снимок или загружает изображение из галереи, после чего этот фрагмент обновляет значение "hayFotos". 1. 1. 1024 *

Затем вызывается фрагмент 2.

Я проверил, что при первом запуске фрагмента 2 значение «hayFotos» равно 1, как и должно быть.

На Фрагменте 2 пользователь делает еще одну фотографию, и значение обновляется до 2, оно работает. * 1 030 *

Для фрагмента 3 это значение равно 2.

Для фрагмента 4 это значение равно 2.

Для фрагмента 5 значение снова равно 0.

Я проверил, что беру правильный ключ getSharedPreferences для каждого фрагмента, но фрагменты в последовательности после фрагмента 4 теряют свои значения для "hayFotos".

Я мог бы опубликовать здесь весь код, чтобы продемонстрировать, что нет ошибки в коде, который объясняет значение 0 для «hayFotos» после фрагмента 4, но я сначала спросил бы вас, есть ли известное объяснение или это, безусловно, ошибка в моем коде

РЕДАКТИРОВАТЬ:

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

Код во фрагменте 1:

 SharedPreferences prefs5 =  getActivity().getSharedPreferences("MiPaciente", Context.MODE_PRIVATE);
        Integer num_buscado = prefs5.getInt("hayFotos",0);
        Log.d("Eva","Eva NE 1 "+num_buscado);

Вывод во фрагменте 1

2020-05-01 16:58:38.076 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 1 0

Код во фрагменте 2:

SharedPreferences prefs5 =  getActivity().getSharedPreferences("MiPaciente", Context.MODE_PRIVATE);
        Integer num_buscado = prefs5.getInt("hayFotos",0);
        Log.d("Eva","Eva NE 2 "+num_buscado);

Вывод во фрагменте 2:

2020-05-01 16:58:38.076 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 1 0
2020-05-01 17:00:21.007 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 2 0

Я делаю снимок во фрагменте 2.

Код в Фрагмент 3:

SharedPreferences prefs5 = getActivity (). GetSharedPreferences ("MiPaci ente ", Context.MODE_PRIVATE); Integer num_buscado = prefs5.getInt ("hayFotos", 0); Log.d ("Eva", "Eva NE 3" + num_buscado);

Вывод во фрагменте 3:

2020-05-01 16:58:38.076 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 1 0
2020-05-01 17:00:21.007 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 2 0
2020-05-01 17:01:58.273 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 3 1

Код во фрагменте 4:

   SharedPreferences prefs5 =  getActivity().getSharedPreferences("MiPaciente", Context.MODE_PRIVATE);
        Integer num_buscado = prefs5.getInt("hayFotos",0);
        Log.d("Eva","Eva NE 4 "+num_buscado);

Вывод во фрагменте 4:

2020-05-01 16:58:38.076 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 1 0
2020-05-01 17:00:21.007 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 2 0
2020-05-01 17:01:58.273 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 3 1
2020-05-01 17:03:38.238 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 4 1

Код во фрагменте 5:

 SharedPreferences prefs5 =  getActivity().getSharedPreferences("MiPaciente", Context.MODE_PRIVATE);
        Integer num_buscadoMiPaciente = prefs5.getInt("hayFotos",0);
        Log.d("Eva","Eva NT 1 MiPaciente "+num_buscadoMiPaciente);
        SharedPreferences prefs6 =  getActivity().getSharedPreferences("MisDatos", Context.MODE_PRIVATE);
        Integer num_buscadoMisDatos = prefs6.getInt("hayFotos",0);
        Log.d("Eva","Eva NT 1 MisDatos "+num_buscadoMisDatos);

Вывод во фрагменте 5:

2020-05-01 16:58:38.076 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 1 0
2020-05-01 17:00:21.007 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 2 0
2020-05-01 17:01:58.273 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 3 1
2020-05-01 17:03:38.238 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 4 1
2020-05-01 17:04:59.547 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NE 1 1
2020-05-01 17:04:59.585 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NT 1 MiPaciente 0
2020-05-01 17:04:59.586 11621-11621/com.mpidesarrollo.capenergy D/Eva: Eva NT 1 MisDatos 0

1 Ответ

0 голосов
/ 01 мая 2020

Вы сохраняете свои данные в контексте Activity, а не в контексте приложения
Измените getActivity().getSharedPreferences(...) на
getApplicationContext().getSharedPreferences(..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...