【问题标题】:Shared prefence from activity to fragment从活动到片段的共享偏好
【发布时间】:2019-11-09 15:47:45
【问题描述】:

我的应用有 mainactivity 用户必须设置密码,并像这样保存在共享偏好中

settings = getSharedPreferences("NAME", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("password", edpassstr);
editor.apply(); 

我可以在另一个活动中成功获得此偏好 但我无法在片段中得到它 这是用于从共享偏好中恢复价值的代码

settings = getActivity().getSharedPreferences("NAME", 0);
String  passs = settings.getString("password", "");

字符串传递是片段内部的=""。为什么? 如何从片段中的共享首选项中获取字符串?

【问题讨论】:

  • 这个 edpassstr 是什么?
  • 来自edittext的字符串
  • 你确定它有一个非空值吗?
  • 是的,因为它是一个简单的编辑文本

标签: android android-fragments sharedpreferences


【解决方案1】:

您在片段中的哪里调用 getActivity() ?因为它会在片段的 onAttach 方法之前被调用时返回 null。在您的片段中,尝试覆盖 onAttach 方法,因为它获取上下文作为参数,如下所示:

@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    SharedPreferences settings = context.getSharedPreferences("NAME", 0);
}

【讨论】:

    【解决方案2】:

    如果您想在整个应用程序中使用共享首选项。您应该使用 applicationcontext 而不是生命周期所有者(活动或片段)上下文。

    applicationcontext.getSharedPreferences(name, mode)
    

    【讨论】:

      【解决方案3】:

      声明为全局变量

      SharedPreferences prefs;
      
      SharedPreferences.Editor editor;
      

      在 onCreate() 方法中声明为

      prefs = getSharedPreferences("data", MODE_PRIVATE);
      editor = getSharedPreferences("data", MODE_PRIVATE).edit();
      
      editor.putString("password", "xyz_password");
      editor.apply();
      

      您可以使用这种方式从共享偏好中获取价值

      prefs.getString(key,default Value);
      prefs.getString("password", "Any value if you not get any value");
      

      很简单,希望对你有帮助……!

      【讨论】:

        猜你喜欢
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 2019-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多