在Android上向/从文件加载捆绑包

时间:2012-08-01 21:30:19

标签: java android

我正在转向做一些Android编码,我经常做的事情就是创建包含静态列表项的plists。当我必须进行用户深入查找信息的多层列表视图时,这会非常有用。 (例如Continent - > Country - > City)我所做的是代码一个列表视图,它将自身的副本推入数据树的深处。

然而,在Android上,我似乎找不到任何类似于plist的东西,它可以让我执行上述操作(无需创建SQL数据库)。

所以我最终做的就是硬编码所有东西......这不是我想做的事情。 Android有大量的xml资源可供使用,这就是我应该遵循的模式。

ArrayList<Bundle> data = new ArrayList<Bundle>();

Bundle infoHeader = new Bundle();
infoHeader.putInt(keyText,R.string.stay_informed);
infoHeader.putInt(keyLayout,R.layout.main_header);
data.add(infoHeader);

Bundle readAction = new Bundle();
readAction.putInt(keyText,R.string.read);
readAction.putInt(keySubtext, R.string.read_substr);
readAction.putInt(keyLayout, R.layout.main_row_blue);
// link to new ArrayList of items for the next level down
data.add(readAction);

我想要做的是以下(或与它非常相似的东西):

<resources>
<array name="main_list">
    <extra>
        <string name="keyText" value="@string/stay_informed" />
        <layout name="keyLayout" value="@layout/main_header" />
    </extra>
    <extra>
        <string name="keyText" value="@string/read" />
        <string name="keySubtext" value="@string/read_substr" />
        <layout name="keyLayout" value="@layout/main_row_blue" />
        <!-- <string name="keyLink" value="@array/detail_list" /> Where detail_list has more Bundles -->
    </extra>
</array>
</resource>

只需在运行时加载该Bundle数组,而不是将其硬编码到应用程序中。

因此。如何在Android上有效地存储/检索NSArray NSDictionaries的等效内容?

(我发现了android plist parser,但我想知道如何在Android上完成)

1 个答案:

答案 0 :(得分:0)

好吧,我会试一试。我目前正在从Android到iOS(与你自己完全相反),所以我明白你在做什么(我认为)。 Java没有“Dictionaries”但它确实有HashMaps(键/值配对 - 同样的事情)。如果您真的想要,可以使用序列化将对象持久保存到可以在Android的assets文件夹中打包的文件中。然后,您可以随时阅读(但不会写入)此信息。

这是一个帮助您序列化Java对象的链接。在Java中搜索HashMaps,你会看到很多东西。如果要在此HashMap中放置许多不同类型的对象,请不要使用泛型。 (它们看起来像<String, String>)。把它们留下来做一个原始的HashMap。

要序列化:(当你坚持它时) http://www.javadb.com/writing-objects-to-file-with-objectoutputstream

反序列化:(当你重新阅读时) http://www.exampledepot.com/egs/java.io/DeserializeObj.html

另一种可能更简单的方法是创建一个XML文件(就像你上面所做的那样)并将其存储在资产中。然后,您可以在应用程序启动时使用XMLPullParser对其进行解析,并在应用程序的持续时间内将其存储在内存中,但您将无法使用“@layout,@ string”等。