在共享首选项中保存值会给出错误

时间:2016-06-27 09:11:17

标签: android sharedpreferences android-broadcastreceiver

Here is my Logcat我想存储一个if块内的字符串值,我想访问它之外的值。现在我尝试使用此代码,但它通过说"打印ln需要一条消息"给我错误和应用程序强制关闭。它是一个广播接收器类,这个代码在OnReceive方法中。 我试过这段代码:

if (!available)
for (String key : contactNumber.keySet()) {
   String msgSender = contactNumber.get(key);
   extractedContact = Utilities.extractNumbers(key);
   preferences = context.getSharedPreferences("progress",Context.MODE_PRIVATE);
   SharedPreferences.Editor editor = preferences.edit();
   editor.putString("number", extractedContact);
   editor.apply();
   }

String showNumber = preferences.getString("number", "");
Toast.makeText(context, showNumber + "Hello",   Toast.LENGTH_LONG).show();

现在我只想将提取的联系人值存储在共享pref中,然后我在if块之外检索它,但它给了我错误。谁能知道这个问题是什么?我如何检索存储的值

3 个答案:

答案 0 :(得分:1)

尝试在从偏好中获取值之前添加以下行。

如下,

      preferences = context.getSharedPreferences("progress",Context.MODE_PRIVATE);
     String showNumber = preferences.getString("number", "");
     Toast.makeText(context, showNumber + "Hello",   Toast.LENGTH_LONG).show();

答案 1 :(得分:0)

这意味着首选项未初始化,需要初始化

for (String key : contactNumber.keySet()) {
..
}

所以,

       if (!available)
    {
   preferences = context.getSharedPreferences("progress",Context.MODE_PRIVATE);

        for (String key : contactNumber.keySet()) {
           String msgSender = contactNumber.get(key);
           extractedContact = Utilities.extractNumbers(key);

           SharedPreferences.Editor editor = preferences.edit();
           editor.putString("number", extractedContact);
           editor.apply();
           }

        String showNumber = preferences.getString("number", "");
        Toast.makeText(context, showNumber + "Hello",   Toast.LENGTH_LONG).show();

    ...
    }// if (!available) close bracket

感谢..

答案 2 :(得分:-3)

替换此行代码

  

editor.apply();

通过

  

editor.commit();