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

我有一个代表JSON feed的大字符串.我的应用从远程Web服务下载此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 feed的第一行有点贵.在我目前的大小饲料(可能会在未来增长)完成,可能需要半秒钟,但不是很多,但仍然是一个问题.例如,我点击按钮来调用活动(显示数据),这个1/2秒的暂停是显而易见的,并不好.

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

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

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

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

做这个的最好方式是什么?

谢谢.

解决方法:

如果速度确实是一个问题,那么显着加速解析(以及写出)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对象.

上一篇:java – 我无法弄清楚如何使用Android PreferenceActivity


下一篇:在Android中使用列表首选项