Skip to content

android json解析问题

因为公司外包的一个安卓的app,在写入sqllite 数据库的时候效率奇低。同步10w多条数据耗时平均20多分钟。

帮忙调试的,发现问题如下:

  1. for循环里去进行插入数据操作
  2. JSON 数组 进行for循环,new GSON解析数据
  3. 1w多条数据进行两次循环组装排序后一次性渲染到树形显示列表

第一个问题比较好解决

使用他使用ormlite 提供的 callBatchTasks 方法进行保存。而不是每次循环进行保存。

最终优化方法:

现组装需要保存的各个集合,然后在一个callBatchTasks 里,进行create.

  1. dao.callBatchTasks(new Callable<Object>() {
  2.         @Override
  3.         public Object call() throws Exception {
  4.              xx1dao.create(new xx1());
  5.             xx2dao.create(new xx2());
  6.             xx3dao.create(new xx3());
  7.             return null;
  8.         }
  9.     });

第二个 JSON 问题解决:

List list = JSONObject.parseArray(arrayJson, Xxx.class);


JSONReader reader = new JSONReader(new FileReader(“/tmp/huge.json”));
reader.startArray();
while(reader.hasNext()) {
VO vo = reader.readObject(VO.class);
// handle vo …
}
reader.endArray();
reader.close();

如果是gson:

List<Xxx> persons =gson.fromJson(json, new TypeToken<List<Xxx>>() {}.getType());

第三个问题:

两种方式:

  1. 通过异步方式加载-默认只加载根,点击后在加载子
  2. 逐步加载,每次加载100个节点,动态渲染

初步解决 1、2 (粗略优化) 由下载插入需要10多分钟,优化为 4-5分钟。

发表评论

电子邮件地址不会被公开。 必填项已用*标注