2013-06-28 61 views
0

我想让我的应用程序从XML数组中读取sharedpreferences默认值,但是我遇到了一个问题。比方说,我有20个复选框,我在strings.xml中将20个项目插入到字符串数组中。现在我想要做的事很简单,我希望我的sharedpreferences从这个数组读取默认值。 Checkbox1将获得第一个项目名称,checkbox2将获得第二个项目名称等。下面的代码显示了我试图做的事情。从XML数组读取sharedpreferences默认值

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在java中获取代码:

private String getItemQuantity(String key){ 
    SharedPreferences itemQuantitySP = getApplicationContext().getSharedPreferences("bifrostPrefs", android.content.Context.MODE_PRIVATE); 
    Resources spRes = getResources(); 
    TypedArray itemNames = spRes.obtainTypedArray(R.array.spBifrost); 
    String itemSp = itemNames.toString(); 
    return itemQuantitySP.getString(key, itemSp); 
} 

现在,当我真正使用此代码,它不工作,我怎么想的。例如,不是将checkbox1重命名为“Elaborate Totem(250)”,而是将它重命名为一堆我不明白的随机数。有人能告诉我我做错了什么吗?我是一个完整的初学者(开始学习一个月前开发的java/android),所以我有很大的机会去完全错误的,这就是为什么我要求你的帮助。

现在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); 
    ArrayList<String> spBifrostArray = new ArrayList<String>(); 
    return itemQuantitySP.getString(key, spBifrostArray.toString()); 
} 
+0

做ü解决了这个问题? – KOTIOS

+0

不幸的是,现在还没有,我觉得我更接近解决方案,但我的应用程序仍然不会读取数组。正如我已经告诉LJoosse(回答我的问题的人),默认值现在显示为“[]”。 – Guy

回答

1

请提问前搜索文档!

正如你可以here看,你应该检索与

Resources res = getResources(); 
String[] spBifrost = res.getStringArray(R.array.spBifrost); 

当然的字符串数组,使之为自己更容易一点,让一个ArrayList:

Resources res = getResources(); 
String[] spBifrost = res.getStringArray(R.array.spBifrost); 
ArrayList spBifrost = new ArrayList<String>(spBifrost); 
+0

非常感谢您的回答,我现在这样做了(检查我的原始文章中的编辑),但它仍然无法正常工作。默认值现在显示[]。任何想法可能是错的? – Guy