java - 在 Android 上向/从文件加载 Bundle

标签 java android

我正转向做一些 Android 编码,我经常做的事情是创建包含我的静态列表项的 plist。当我必须执行多层 ListView 时,这非常有用,用户可以在其中向下钻取以查找信息。 (例如 Continent --> Country --> City)然后我所做的是编写一个 ListView ,将其自身的副本更深地钻入数据树。

但是,在 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 上 NSDictionariesNSArray 的等价物?

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

最佳答案

好吧,我会试一试。我目前正在从 Android 转向 iOS(与您完全相反),所以我了解您正在尝试做什么(我认为)。 Java 没有“字典”,但它确实有 HashMap(键/值配对 - 同样的事情)。如果你真的想要,你可以使用序列化将你的对象保存到一个文件中,你可以将这个文件打包到 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 文件(就像您在上面所做的那样)并将其存储在 Assets 中。然后,您可以在应用启动时使用 XMLPullParser 对其进行解析,并在应用运行期间将其存储在内存中,但您将无法使用“@layout、@string”等。

关于java - 在 Android 上向/从文件加载 Bundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767874/

相关文章:

java - 如何使用 Jackson 将 ArrayList 变量转换为 XML 并自行定义根元素

android - 在 Android 主页小部件(不在 Activity 中)中获取 TextView 的文本?

android - 查看寻呼机 - 如何在其顶部放置固定按钮

java - 看不到 DialogFragment 中长 ListView 底部的按钮

java - 在 java.util.Properties$LineReader.readLine(Properties.java :418) for Spring Security) 处获取问题 java.lang.NullPointerException

java - 使用 Java 创建 GDG 基础

android - 如何在 Android 数据绑定(bind)中的属性更改时得到通知?

android - google play 上 android 应用程序的描述,语言不同于英语

java - 存储库搜索中带有对象与参数列表的方法。违反建议零售价?

java - 自动更新JTable