You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用minimal-json解析JSON文件时进程停滞无报错求助

问题排查方案

1. 修复UI线程调用错误

你在后台线程onHandleIntent中直接调用Toast.makeText,这是违规操作——Toast必须在UI线程执行,后台线程调用会触发异常甚至阻塞线程。先替换这部分代码:

// 替换原Toast代码,切换到UI线程执行
new Handler(Looper.getMainLooper()).post(() -> {
    Toast.makeText(JsonDownload.this, nomePrimeiroImovel, Toast.LENGTH_SHORT).show();
});

2. 强化异常日志定位问题

当前catch块仅打印栈轨迹,容易忽略关键错误信息。修改日志输出,明确错误类型:

catch (Exception e) {
    Log.e("JSONDownload", "JSON处理失败: " + e.getMessage(), e);
    result = Activity.RESULT_CANCELED;
}

通过这条日志,你能直接看到是类型转换错误(比如把非对象转成JsonObject)、JSON语法错误,还是其他问题。

3. 验证JSON结构与解析逻辑匹配

你的代码默认JSON结构是:

{
  "imoveis": {
    "imovel": [ ... ]
  }
}

但实际返回的JSON可能不符合该结构:

  • 比如imoveis本身就是数组,而非包含imovel数组的对象;
  • 或者imovel是单个对象而非数组;
  • 或者字段名存在大小写/拼写差异。

先打印完整JSON数据确认结构:

Log.d("JSONDownload", "原始JSON数据: " + jsonData);

再根据实际结构调整解析代码。

4. 检查JSON语法与minimal-json版本

如果JSON存在语法错误(比如末尾多余逗号、未转义的引号),Json.parse()会抛出ParseException导致解析停滞。同时确保你使用的是minimal-json最新稳定版,避免版本bug。

5. 优化输入流读取方式

Scanner的useDelimiter("\\A")读取方式在部分场景下可能存在兼容性问题,换成更可靠的读取逻辑:

InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
StringBuilder jsonBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
    jsonBuilder.append(line);
}
String jsonData = jsonBuilder.toString();
reader.close();

内容的提问来源于stack exchange,提问作者Francisco Franco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:45:00