处理JSON对象的最佳方法是什么?

时间:2010-11-29 23:16:28

标签: android json parsing storage preferences

我有一个代表JSON提要的大字符串。我的应用从远程网络服务下载此Feed。

问题:

1)下载JSON Feed后,我应该在哪里存储它?现在我将它存储在应用程序首选项中,它工作正常。我有兴趣知道是否有任何理由不这样做,或者是否有更好/更快的选项,如内部存储或其他什么?

2)当我要在我的活动中显示来自此Feed的数据时,我会执行以下操作:

JSONObject jsonObj = new JSONObject(json_string);
JSONArray jsonArr = jsonObj.getJSONArray("root");
for (int m = 0; m < jsonArr.length(); m++) {
    ....
}

问题是,解析JSON提要的第一行有点贵。在我目前的大小饲料(可能会在未来增长)完成,可能需要半秒钟,但不是很多,但仍然是一个问题。例如,我点击按钮来调用活动(显示数据),这个1/2秒的暂停是显而易见的,并不是很好。

为了避免这种暂停,我应该在下载feed之后立即解析JSON。那么问题是,我应该在哪里保存解析的JSON对象?

i)我无法将JSON对象保存到首选项,因为只有原始数据可以存储在那里。

ii)每次我的应用程序启动时是否应该进行解析,并使我的解析后的JSON对象(我有更多的对象)全局(在应用程序级别),以便我可以从我的所有活动中访问它们?

iii)或者,我相信我的第三个选择是将JSON对象声明为静态,以便从其他活动中轻松访问它们?

这样做的最佳方式是什么?

THX。

3 个答案:

答案 0 :(得分:3)

如果速度确实是一个问题,那么显着加快解析(以及写出)JSON数据的一种简单方法是使用Jackson来解析JSON数据。与org.json库(Android SDK附带)相比,如果您只想解析地图或列表,它至少要快3-5倍(http://www.cowtowncoder.com/blog/archives/2009/02/ entry_204.html)。 但是如果你可以将它绑定到Java对象,那么它更快,并且使用更少的内存。

如果要保存JSON数据,通常只将其序列化为文件或数据库中的BLOB;但除非你真的需要,否则最好只保留从JSON数据创建的Java对象。

答案 1 :(得分:1)

你需要存放吗?如果您从网页下载一次,这就是您所需要的,将其存储在共享首选项中就可以了。如果你需要得到它,为什么甚至存储它?您也可以将其存储在缓存目录

答案 2 :(得分:1)

听起来您应该使用 SQLite数据库来存储从JSON中提取的值。这应该可以帮助您入门:http://developer.android.com/guide/topics/data/data-storage.html#db

然后,您的应用程序中的所有活动都可以在数据库中查询数据。如果您使用ListView查看信息,则可以使用CursorAdapter轻松填充列表。

您甚至可以创建Content Provider以与其他应用程序共享此信息