应用程序中的SharedPreferences没有存储值



我在整个应用程序中都使用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。

为了使我的问题更容易理解,我将给你举一个例子。

有一个共享偏好项名为:

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

要遵循序列,在应用程序启动时,其值为0

在片段1第一次运行时,它的值显然是0。

在片段1中,用户从图库中拍摄图片或加载图片,然后该片段将"hayFotos"值更新为1。

然后调用片段2。

我已经验证了,在第一次从片段2运行时,"hayFotos"的值是1,这是应该的。

在片段2,用户拍摄另一张照片,并且值被更新为2,这就起作用了。

在片段3处,值为2。

在片段4处,值为2。

在片段5处,值再次为0。

我已经检查过我在每个片段上都使用了正确的getSharedPreferences键,但片段4之后序列中的片段正在失去其"hayFotos"的值。

我可以在这里发布所有的代码来证明在解释片段4之后"hayFotos"的值0的代码中没有错误,但我想先问你是否有已知的解释,或者这肯定是我的代码中的错误

编辑:

我将把代码和调试器输出放在这里,以演示我的问题:

片段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("MiPaciente",Context.MODE_PRIVATE(;整数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

您将数据保存在Activity上下文中,而不是应用程序上下文中
getActivity().getSharedPreferences(...)更改为
getApplicationContext().getSharedPreferences(..)

相关内容

  • 没有找到相关文章

最新更新