使用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
相关产品推荐
相关产品推荐

