首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SharedPreferences getString返回null

SharedPreferences getString返回null
EN

Stack Overflow用户
提问于 2018-06-27 07:15:31
回答 1查看 223关注 0票数 0

我一直得到null,而不是预期的字符串。我已经向getSharedPreferences传递了应用程序的上下文和正确的密钥。我将上传XML文件。我不知道这是怎么回事。

java.lang.NullPointerException: println needs a message on line Log.d("MomentPrefTimeStamp", momentData.getString("caption", null));首选项文件中没有显示任何内容,但是键是正确的,并且momentData是有效的SharedPreferences对象。至少在调试器中是这样。

这是XML,下面是代码。

代码语言:javascript
运行
复制
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="time_stamp">1529509324</string>
<string name="img_uri">content://com.example.android.fileprovider/my_images/JPEG_20180620_114201_1480896410651074556.jpg</string>
<string name="caption">Captionas</string>
</map>

为什么我无法使用正确的键和上下文获取数据?

-

代码语言:javascript
运行
复制
    if (prefsDir.exists() && prefsDir.isDirectory()) {
        String[] list = prefsDir.list();
        Log.d("PrefList", list.toString());
        //Iterate through every file in the directory
        for (String title : list) {
            Log.d("prefTitle", title);
            //Only open files with our MOMENT marker, since there will be other shared_pref files inside folder.
            String[] momentID = title.split("_");
            Log.d("StringMoment", momentID.toString());
            Log.d("StringMoment1", momentID[0]);
            if (momentID.length > 1) {
                Log.d("StringMoment2", momentID[1]);
                if (momentID[1].equals("JPEG.xml")) {
                    Log.d("momentTitle", title);
                    SharedPreferences momentData = this.getSharedPreferences(title, this.MODE_PRIVATE);
                    Log.d("MomentPref", momentData.toString());
                    Log.d("MomentPrefTimeStamp", momentData.getString("caption", null));
                    moments.add(momentData);
                }
            }
        }
    }

    return moments;
EN

回答 1

Stack Overflow用户

发布于 2018-06-27 08:32:01

如果你通过字符串技巧和文件目录得到SharedPreferences,一定要从文件名中去掉扩展名。我不知道为什么它仍然给我一个SharedPreference对象而不是空指针异常,但这就是问题所在。

1234242_JPEG.xml必须是1234242_JPEG才能获得正确的SharedPreference文件。下面是修复方法。

代码语言:javascript
运行
复制
                    String name = title.substring(0, title.lastIndexOf('.'));
                    Log.d("MomentName", name);
                    SharedPreferences momentData = this.getSharedPreferences(name, this.MODE_PRIVATE);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51052547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档