我有一个代表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。
答案 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以与其他应用程序共享此信息