【问题标题】:Read sharedpreferences default values from XML array从 XML 数组中读取 sharedpreferences 默认值
【发布时间】:2013-06-28 11:22:49
【问题描述】:

我正在尝试让我的应用程序从 XML 数组中读取 sharedpreferences 默认值,但我在实现这一点时遇到了问题。例如,假设我有 20 个复选框,我在 strings.xml 中的字符串数组中插入了 20 个项目。现在我想做的很简单,我希望我的 sharedpreferences 从这个数组中读取默认值。 Checkbox1 将获得第一个项目名称,checkbox2 将获得第二个项目名称,依此类推。下面的代码显示了我尝试做的事情。

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());
}

【问题讨论】:

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

标签: java android eclipse sharedpreferences


【解决方案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);

【讨论】:

  • 非常感谢您的回答,我现在就是这样做的(检查我原始帖子中的编辑),但它仍然无法正常工作。默认值现在显示 []。知道可能出了什么问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2013-02-25
  • 1970-01-01
相关资源
最近更新 更多