【问题标题】:Get Android shared preferences value in activity/normal class在活动/普通类中获取 Android 共享首选项值
【发布时间】:2011-11-21 17:58:12
【问题描述】:

我已经创建了一个存储用户设置的共享首选项活动,现在我想在活动或普通 java 类中获取值。请提供我已经尝试过此代码但失败的解决方案或示例。

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    SharedPreferences channel=this.getSharedPreferences(strFile, Context.MODE_PRIVATE);
    strChannel=channel.getString(keyChannel,"Default").toString();
    Toast.makeText(getApplicationContext(), strChannel, Toast.LENGTH_LONG).show();
}                     

在此代码中strfile 例如。 com.android.pack.ClassName 是要获取的值中的SharedPreference Activity,keyChannel 是与SharedPreference Activity 相同的键。

请提供解决方案。

【问题讨论】:

  • 这段代码会产生什么?有没有抛出异常?
  • 您有任何错误吗?这不起作用是你在说什么?

标签: android sharedpreferences


【解决方案1】:

如果你有一个 SharedPreferenceActivity 来保存你的值

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String imgSett = prefs.getString(keyChannel, "");

如果该值保存在 Activity 的 SharedPreference 中,那么这是保存它的正确方法。

SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
editor.putString(keyChannel, email);
editor.commit();// commit is important here.

这就是您检索值的方式。

SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
String channel = (shared.getString(keyChannel, ""));

另外请注意,您也可以在非 Activity 类中这样做,但唯一的条件是您需要传递 Activity 的上下文。使用此上下文获取 SharedPreferences。

mContext.getSharedPreferences(PREF_NAME, MODE_PRIVATE);

【讨论】:

  • 我无法理解 SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE); 之间的区别。字符串通道 = (shared.getString(keyChannel, ""));而这个 SharedPreferences channel=this.getSharedPreferences(strFile, Context.MODE_PRIVATE); strChannel=channel.getString(keyChannel,"Default").toString();请告诉一件事 PREF_NAME 的值是什么,请提供示例,可能是我给出了错误的课程路径。我给了 String strFile="com.android.pref.PrefClass";
  • PRE_NAME 只是一个字符串。它可以是任何东西,例如:您的应用程序名称、您的名称、您的类名等。这两个语句之间绝对没有差异。顺便说一句,你的输出是什么
  • 它显示空白吐司,但我很困惑,新活动如何知道要获取哪个偏好。请解释一下可以获得特定值的匹配参数...
  • 如果我在 getString(key,"Default") 中输入一些值,那么在 Toast 上给出默认值。
  • 应用程序中的所有活动中的 PREF_NAME 应该相同。这是改变的关键。 SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);此行在应用程序内存中保留了一个内存空间池。当您使用以下行时... editor.putString(keyChannel, val);创建了一个空间并在其中存储了val,可以通过变量keyChannel来识别。
【解决方案2】:

这是我认为最简单的过程:

SharedPreferences sp = getSharedPreferences("MySharedPrefs", MODE_PRIVATE);
SharedPreferences.Editor e = sp.edit();

    if (sp.getString("sharedString", null).equals("true")
            || sp.getString("sharedString", null) == null) {
        e.putString("sharedString", "false").commit();
        // Do something
    } else {
        // Do something else
    }

【讨论】:

    【解决方案3】:

    我尝试使用此代码从活动中检索共享首选项,但无法使其正常工作:

            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        sharedPreferences.getAll();
        Log.d("AddNewRecord", "getAll: " + sharedPreferences.getAll());
        Log.d("AddNewRecord", "Size: " + sharedPreferences.getAll().size());
    

    每次我尝试时,我的首选项都返回 0,即使我有 14 个首选项活动保存的首选项。 我终于找到了答案。我将此添加到 onCreate 部分的首选项中。

    getPreferenceManager().setSharedPreferencesName("defaultPreferences");

    添加此语句后,我保存的首选项按预期返回。我希望这对可能遇到与我相同的问题的其他人有所帮助。

    【讨论】:

      【解决方案4】:

      您使用卸载应用程序并更改 sharedPreferences 名称然后运行此应用程序。我认为它会解决问题。

      从 sharedPreferences 中检索值的示例代码,您可以使用以下代码集,

      SharedPreferences shared = getSharedPreferences(PREF_NAME, MODE_PRIVATE);
      String channel = (shared.getString(keyValue, ""));
      

      【讨论】:

        猜你喜欢
        • 2011-09-05
        • 1970-01-01
        • 2012-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多