【问题标题】:SharedPreferences all along the app is not storing the values整个应用程序中的 SharedPreferences 不存储值
【发布时间】:2020-05-01 14:36:35
【问题描述】:

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

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

有一个 sharepreferences 项称为:

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

按照顺序,在应用启动时,其值为0

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

在 Fragment 1,用户拍照或从图库中加载图片,然后此 Fragment 将“hayFotos”值更新为 1。

然后调用 Fragment 2。

我已经验证,在第一次运行 Fragment 2 时,“hayFotos”的值应该是 1。

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

在片段 3 处,值为 2。

在片段 4 处,值为 2。

在 Fragment 5 处,值再次为 0。

我检查了我在每个 Fragment 上使用了正确的 getSharedPreferences 键,但是 Fragment 4 之后序列中的 Fragments 正在失去其“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

【问题讨论】:

  • 也许查看设置值的代码会很有用。例如,您可能会在返回导航时为首选项设置过时的值。

标签: android sharedpreferences


【解决方案1】:

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

【讨论】:

  • 让我试试,如果你是对的,那你就让我开心
  • 它不起作用,我尝试了两种方法但结果相同
  • 我还更改了从 prefs = this.getSharedPreferences(MIPACIENTE, Context.MODE_PRIVATE); 拍照的活动to prefs = getApplicationContext().getSharedPreferences(MIPACIENTE, Context.MODE_PRIVATE);
  • 我现在完全迷路了
猜你喜欢
  • 2016-04-18
  • 1970-01-01
  • 2018-06-10
  • 2015-10-28
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多