我一直得到null,而不是预期的字符串。我已经向getSharedPreferences传递了应用程序的上下文和正确的密钥。我将上传XML文件。我不知道这是怎么回事。
java.lang.NullPointerException: println needs a message
on line Log.d("MomentPrefTimeStamp", momentData.getString("caption", null));
首选项文件中没有显示任何内容,但是键是正确的,并且momentData是有效的SharedPreferences对象。至少在调试器中是这样。
这是XML,下面是代码。
<?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>
为什么我无法使用正确的键和上下文获取数据?
-
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;
发布于 2018-06-27 08:32:01
如果你通过字符串技巧和文件目录得到SharedPreferences,一定要从文件名中去掉扩展名。我不知道为什么它仍然给我一个SharedPreference对象而不是空指针异常,但这就是问题所在。
1234242_JPEG.xml必须是1234242_JPEG才能获得正确的SharedPreference文件。下面是修复方法。
String name = title.substring(0, title.lastIndexOf('.'));
Log.d("MomentName", name);
SharedPreferences momentData = this.getSharedPreferences(name, this.MODE_PRIVATE);
https://stackoverflow.com/questions/51052547
复制相似问题