我试图从我在XML文件中创建的字符串数组中读取sharedpreferences默认值。
Sharedpreferences获取Java代码:
private String getItemQuantity(String key){
SharedPreferences itemQuantitySP = getApplicationContext().getSharedPreferences("bifrostPrefs", android.content.Context.MODE_PRIVATE);
Resources res = getResources();
String[] spBifrost = res.getStringArray(R.array.spBifrost);
return itemQuantitySP.getString(key, spBifrost.toString());
}
字符串数组XML:
<string-array name="spBifrost">
<item>Elaborate Totem (250)</item>
<item>Pile of Crystalline Dust (250)</item>
<item>Powerful Venom Sac (250)</item>
<item>Vial of Powerful Blood (250)</item>
<item>Ancient Bone (250)</item>
<item>Armored Scale (250)</item>
<item>Vicious Claw (250)</item>
<item>Vicious Fang (250)</item>
<item>Glob of Ectoplasm (77)</item>
<item>Glob of Ectoplasm (77)</item>
<item>Mystic Coin (77)</item>
<item>Obsidian Shard (77)</item>
<item>Philosophers Stone (462)</item>
<item>Badge of Honor (500)</item>
<item>Obsidian Shard (250)</item>
<item>Shard of Zhaitan (500)</item>
<item>Opal Orb (100)</item>
<item>Pile of Crystalline Dust (250)</item>
<item>Unidentified Dye (250)</item>
<item>Pile of Crystalline Dust (250)</item>
<item>Pile of Incandescent Dust (250)</item>
<item>Pile of Luminous Dust (250)</item>
<item>Pile of Radiant Dust (250)</item>
<item>Icy Runestone (100)</item>
</string-array>
现在,每当我使用sharedpreferences时,它会自动读取默认值为[Ljava.lang.String; @ 435ec530,我不知道从哪里获取它以及如何修复它。我有24个复选框,我希望它使用checkbox1的第一项,checkbox2的第二项等等。
调用getItemQuantity:
cb4.setText(getItemQuantity("cb4quantity"));
String[] spBifrost = getItemQuantity("cb4quantity").split(";");
答案 0 :(得分:0)
很简单,你就是不能把数组放到Shared Prefs上。另外itemQuantitySP.getString(key, spBifrost.toString());
必须返回String,而不是字符串数组。因此,如果您需要从该数组返回一些默认值,请执行以下操作:
itemQuantitySP.getString(key, spBifrost[itemPositionThatYouWantToUseAsDefault]);
答案 1 :(得分:0)
您需要使用当前String Array中的分隔符创建String,然后将其作为默认值传递给SharedPreferences.getString
方法:
String[] spBifrost = res.getStringArray(R.array.spBifrost);
StringBuilder stringbuffer = new StringBuilder();
for(String item : str_arr) {
stringbuffer.append(item).append(";");
}
return itemQuantitySP.getString(key, stringbuffer.toString());
现在从SharedPreferences
获取String后,您将需要使用String.split
从中获取String Array:
String[] spBifrost = getItemQuantity(<pass_key_here>).split(";");