SharedPreferences一直以来的应用都没有存储值。

问题描述 投票:0回答:1

我在我的应用程序中一直使用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);

在应用程序中,有一连串的碎片,作为一个长的形式工作,由应用程序用户用来介绍几个信息。

我发现了一个让我目前很抓狂的问题。

有Fragment 1,Fragment 2...。碎片10。

为了让我的问题更容易理解,我给大家举个例子。

有一个叫sharepreferences的项目。

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

遵循顺序,在应用程序启动时,它的值是0。

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

在Fragment 1中,用户拍摄了一张图片或从图库中加载了一张图片,比这个片段将 "hayFotos "的值更新为1。

然后调用Fragment 2。

我已经验证了,在第一次运行Fragment 2时,"hayFotos "的值是1,因为它应该是。

在Fragment 2中,用户拍摄了另一张照片,值更新为2,它工作了。

在Fragment 3,值是2。

在Fragment 4,值是2。

在Fragment 5,数值又是0。

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

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

EDIT:

我把代码和调试器的输出放在这里,以证明我的问题。

片段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); 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

片段3的输出: 片段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
android sharedpreferences
1个回答
0
投票

你把你的数据保存在 Activity 语境而非应用语境 更改 getActivity().getSharedPreferences(...)getApplicationContext().getSharedPreferences(..)

© www.soinside.com 2019 - 2024. All rights reserved.