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

使用Retrofit库时App崩溃,出现NullPointerException问题求助

Retrofit NullPointerException 解决方案

崩溃原因

日志明确指出:null cannot be cast to non-null type kotlin.collections.MutableList<...>,问题出在这行代码:

list=response.body() as MutableList<animaldashmodel>

两个核心问题:

  1. Retrofit的response.body()可能返回null(比如接口返回空、HTTP状态码非2xx),直接用非空强转as会触发kotlin的NullPointerException
  2. 就算接口返回了List,Retrofit默认返回的是不可变List,直接强转MutableList也存在类型转换风险

修复代码

修改onResponse方法,加入空判断+安全转换逻辑:

override fun onResponse(
    call: Call<List<animaldashmodel>>,
    response: Response<List<animaldashmodel>>
) {
    // 先校验请求是否成功且返回数据不为空
    if (response.isSuccessful && response.body() != null) {
        // 安全将不可变List转为MutableList
        list = response.body()!!.toMutableList()
        val adapter = Animal_Dashboard_Adapter(this@Animal_Dashboardview_activity, list)
        binding.recycle.adapter = adapter
    } else {
        // 处理请求失败或空数据场景
        Toast.makeText(applicationContext, "数据加载失败", Toast.LENGTH_SHORT).show()
        // 可选:给RecyclerView设置空状态视图/适配器
    }
}

额外优化建议

  • 不要直接传applicationContext给适配器,建议用当前Activity的上下文this@Animal_Dashboardview_activity,降低内存泄漏风险
  • 给list变量设置默认值(比如val list = mutableListOf<animaldashmodel>()),避免后续使用时出现空指针
  • 在onFailure中打印错误日志,方便排查问题:
    override fun onFailure(call: Call<List<animaldashmodel>>, t: Throwable) {
        t.printStackTrace()
        Toast.makeText(applicationContext, "网络错误:${t.message}", Toast.LENGTH_SHORT).show()
    }
    

内容的提问来源于stack exchange,提问作者Babariya Rutviksinh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:48:31