从字符串数组sharedpreferences读取

时间:2013-07-02 21:06:49

标签: java android eclipse sharedpreferences

我试图从我在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(";");

2 个答案:

答案 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(";");