求助:主ListView跳转详情Activity显示为空,伴JSON输入异常(明日截止)
解决org.json.JSONException: 在字符2处到达输入末尾及详情Activity为空问题
别慌!这个错误其实很常见,咱们快速定位问题解决,先帮你搞定截止日期的事儿~
首先,org.json.JSONException: 在字符2处到达输入末尾 这个错误的核心原因是:你要解析的FinalJSonObject不是一个完整、合法的JSON字符串——它只到第2个字符就结束了,导致JSON解析器无法正常工作,这也是你详情Activity显示为空的直接原因(因为没拿到有效数据)。
给你几个针对性的排查和解决步骤:
先确认
FinalJSonObject的真实内容
在doInBackground方法的最开头,加一行日志把这个字符串打出来:Log.d("JSON_CHECK", "FinalJSonObject内容:" + FinalJSonObject);运行后看Logcat,你会发现这个字符串要么是残缺的(比如只有
[{"就结束了),要么根本不是JSON格式。追溯数据来源,修复不完整问题
根据FinalJSonObject的来源分情况处理:- 如果是网络请求获取的:检查网络请求是否成功(响应码是不是200),有没有完整读取响应体——比如是不是只读取了部分字节就停止了;
- 如果是本地存储(文件/SharedPreferences)读取的:检查数据写入时是不是完整,有没有被意外截断或者写入失败。
修正JSON解析逻辑,兼容格式问题
从你的代码片段看,你直接把FinalJSonObject当成JSON数组解析,但要确认它本身就是数组格式(开头[,结尾])。如果它实际是JSON对象(开头{),强行用JSONArray解析肯定报错。可以加个容错处理:@Override protected Void doInBackground(Void... arg0) { try { if(FinalJSonObject != null) { Log.d("JSON_CHECK", "FinalJSonObject内容:" + FinalJSonObject); try { // 先尝试解析为数组 JSONArray jsonArray = new JSONArray(FinalJSonObject); for(int i=0; i<jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); // 你的数据处理逻辑... } } catch (JSONException e) { // 数组解析失败,尝试解析为对象 try { JSONObject jsonObject = new JSONObject(FinalJSonObject); // 处理单个对象的逻辑... } catch (JSONException ex) { ex.printStackTrace(); Log.e("JSON_ERROR", "JSON格式完全错误:" + ex.getMessage()); } } } } catch (Exception e) { e.printStackTrace(); } return null; }同步修复详情Activity的显示问题
等JSON解析正常拿到数据后,再检查:- 从ListView跳转时,有没有通过Intent把解析好的数据传递给详情页(比如
intent.putExtra("data", jsonObject.toString())); - 详情Activity有没有正确接收数据并绑定到UI控件上。
- 从ListView跳转时,有没有通过Intent把解析好的数据传递给详情页(比如
紧急小技巧:如果时间实在紧张,可以先找一段合法的测试JSON硬编码到FinalJSonObject里,先让详情页能正常显示,之后再慢慢修复数据来源的问题,先应付截止日期再说~
内容的提问来源于stack exchange,提问作者Natlus
相关产品推荐
相关产品推荐

