代码之家  ›  专栏  ›  技术社区  ›  mvasco

SharedReferences应用程序始终没有存储这些值

  •  0
  • mvasco  · 技术社区  · 4 年前

    我在我的应用程序中一直使用SharedReference。

    我定义了两种类型。其中一个叫做:

    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。

    然后片段2被调用。

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

    在片段2,用户拍摄另一张照片,值被更新为2,它起作用。

    片段3的值为2。

    片段4的值为2。

    在片段5,值再次为0。

    我已经检查过,我在每个片段上都使用了正确的GetSharedReferences键,但是片段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中的代码:

    SharedReferences prefs5=getActivity()。GetSharedReferences(“MiPaciente”,Context.MODE_PRIVATE); 整数num_buscado=prefs5。getInt(“hayFotos”,0); 日志d(“Eva”、“Eva NE3”和“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
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Mostafa Soliman    4 年前

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