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

Android应用解析JSON后无法在模拟器运行问题求助

Android应用安装后无法启动问题排查与修复

问题概述

编译、运行无报错,模拟器安装成功后无法启动,日志仅显示安装完成,推测是JSON文件访问或解析异常导致应用崩溃。

核心问题与修复方案

1. JSON文件语法错误

提供的JSON.json存在两处语法问题:

  • starred_url字段末尾多了一个逗号;
  • 整个JSON结构未闭合(items数组、外层对象均缺少结束括号)。

修复后的JSON示例:

{
  "total_count": 357602,
  "incomplete_results": false,
  "items": [
    {
      "id": 23096959,
      "node_id": "...",
      "name": "...",
      "full_name": "...",
      "private": false,
      "owner": {
        "login": "...",
        "id": 4314092,
        "node_id": "...",
        "avatar_url": "https://...",
        "url": "https://api.github.com/users/golang",
        "followers_url": "https://api.github.com/users/golang/followers",
        "following_url": "https://api.github.com/users/golang/following{/other_user}",
        "starred_url": "https://api.github.com/users/golang/starred{/owner}{/repo}"
      }
    }
  ]
}

2. JSON解析路径错误

MainActivity中尝试直接获取顶层owner数组,但实际JSON结构里,owner是items数组内每个对象的子对象,并非顶层数组。

修复后的MainActivity解析逻辑:

try {
    val jsonString = getJSONFromAssets()
    if (jsonString == null) {
        Log.e("MainActivity", "无法读取assets中的JSON文件")
        return
    }
    val obj = JSONObject(jsonString)
    val itemsArray = obj.getJSONArray("items") // 先获取items数组

    for (i in 0 until itemsArray.length()) {
        val item = itemsArray.getJSONObject(i)
        val owner = item.getJSONObject("owner") // 从item中取出owner对象

        val userId = owner.getInt("id")
        val nodeId = owner.getString("node_id")
        val avatarUrl = owner.getString("avatar_url")
        val followersUrl = owner.getString("followers_url")
        val starredUrl = owner.getString("starred_url")

        val userDetails = UserModelClass(userId, nodeId, avatarUrl, followersUrl, starredUrl)
        usersList.add(userDetails)
    }
} catch (e: JSONException) {
    e.printStackTrace()
    Log.e("MainActivity", "JSON解析错误: ${e.message}")
}

3. 字段映射不匹配

解析时使用的字段名与JSON实际字段、UserModelClass属性不对应:

  • 原代码用user.getString("name")赋值给node_id,但JSON中owner无name字段,应取node_id;
  • 原代码用followers、stars字段,JSON中实际是followers_url、starred_url。

修复方案:
确保解析的字段名与JSON完全一致,且对应到UserModelClass的正确属性,参考上述修复后的解析逻辑。

4. 空值强制转换风险

原代码用getJSONFromAssets()!!强制转换,若JSON文件读取失败返回null,会直接抛出NullPointerException导致应用崩溃。

修复方案:
解析前先判断JSON字符串是否为null,避免强制转换,参考上述修复后的代码逻辑。

额外注意事项

  • 确认JSON.json文件放置在src/main/assets目录下,文件名大小写与代码中一致(Android系统区分大小写);
  • 检查activity_main.xml中是否正确声明了rvUsersList,以及item_user.xml中各TextView的id是否与UserViewHolder中的findViewById调用对应。

内容的提问来源于stack exchange,提问作者Pop Raluca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:15:43