【问题标题】:SharedPreferences strange warningSharedPreferences 奇怪的警告
【发布时间】:2013-08-27 09:49:18
【问题描述】:

我使用 SharedPreferences,有时我在 logcat 中收到此警告:

08-27 11:46:55.453: W/SharedPreferencesImpl(21824): getSharedPreferences
08-27 11:46:55.453: W/SharedPreferencesImpl(21824): org.xmlpull.v1.XmlPullParserException: Map value without name attribute: string
08-27 11:46:55.453: W/SharedPreferencesImpl(21824):     at com.android.internal.util.XmlUtils.readThisMapXml(XmlUtils.java:568)
08-27 11:46:55.453: W/SharedPreferencesImpl(21824):     at com.android.internal.util.XmlUtils.readThisValueXml(XmlUtils.java:821)
08-27 11:46:55.453: W/SharedPreferencesImpl(21824):     at com.android.internal.util.XmlUtils.readValueXml(XmlUtils.java:755)
08-27 11:46:55.453: W/SharedPreferencesImpl(21824):     at com.android.internal.util.XmlUtils.readMapXml(XmlUtils.java:494)
08-27 11:46:55.453: W/SharedPreferencesImpl(21824):     at android.app.SharedPreferencesImpl.loadFromDiskLocked(SharedPreferencesImpl.java:113)
08-27 11:46:55.453: W/SharedPreferencesImpl(21824):     at android.app.SharedPreferencesImpl.access$000(SharedPreferencesImpl.java:48)
08-27 11:46:55.453: W/SharedPreferencesImpl(21824):     at android.app.SharedPreferencesImpl$1.run(SharedPreferencesImpl.java:87)

它在大多数情况下都有效,但测试人员说有时他们会遇到问题。有时加载回来根本不起作用。 这是我的SharedPreffer 班级:

public class SharedPreffer {

    String PREF_FILE_NAME = "saveFile";

    public SharedPreffer(Context context) {
        this.context = context;
    }

    Context context;
    public static final String DEFAULT_VALUE = "";

    public void savePreferences(String key, int value) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(
                PREF_FILE_NAME, 0);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, Integer.toString(value));
        editor.commit();
    }

    public void savePreferences(String key, String value) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(
                PREF_FILE_NAME, 0);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }

    public void savePreferences(String key, Boolean value) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(
                PREF_FILE_NAME, 0);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, Boolean.toString(value));
        editor.commit();
    }


    public String loadPreferences(String key) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, 0);

        return sharedPreferences.getString(key, DEFAULT_VALUE);

    }

}

谁能给我一些提示?

【问题讨论】:

标签: android


【解决方案1】:

Map value without name attribute: string 建议您的 String key 为 null 或为空。

在方法的开头检查这种情况,如果有问题抛出异常,你会看到你从哪里传递了这些无效的键:

if (key == null || key.equals("")) throw new IllegalArgumentException("Key can't be null or empty string");

【讨论】:

  • 如果我想在默认加载时明确使用 "" 空字符串怎么办?当根本没有储值时。
  • @AdamVarhegyi 没关系,因为值可以是“”。键不能。
【解决方案2】:

我多次收到相同的警告。

每当我使用共享偏好时。后来我注意到,只要应用程序因任何运行时异常而崩溃,就会显示此警告。并重新启动使用共享首选项的上一个活动来获取首选项值。然后我 Googled 它并从这个 SO Question 得到这个结果

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 2011-12-08
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多