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

通过Intent传递其他类数组数据时出现NullPointerException问题

解决Intent传递String数组时的NullPointerException问题

问题分析

你遇到的NullPointerException是因为getSerializableExtra("key_questions")返回了null,而你强行将其转换为非空的Array<String>类型,触发了Kotlin的非空检查异常。另外,传递String数组时,Android Intent有更针对性的API,没必要用Serializable。

解决方案

方法1:使用Intent专门的String数组传递/接收API

这是最推荐的方式,针对String数组做了优化,代码更简洁安全。

修改nextActivity的接收代码:

class nextActivity : AppCompatActivity() {
    lateinit var array_questionContents: Array<String>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_game)

        // 使用getStringArrayExtra替代getSerializableExtra
        array_questionContents = intent.getStringArrayExtra("key_questions") 
            ?: throw IllegalArgumentException("未从Intent中获取到题目数组")
        // 如果允许空数组,也可以替换成 ?: emptyArray()
    }
}

currentActivity的传递代码无需修改,putExtra可以直接接收String数组,内部会自动处理序列化。

方法2:安全转换Serializable(不推荐)

如果坚持使用Serializable方式,需要用安全转换避免NPE:

class nextActivity : AppCompatActivity() {
    lateinit var array_questionContents: Array<String>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_game)

        array_questionContents = intent.getSerializableExtra("key_questions") as? Array<String> 
            ?: emptyArray()
    }
}

as?会在转换失败时返回null,再通过?:运算符给一个默认值(比如空数组),避免抛出异常。

额外注意事项

  • 避免用lateinit接收可能为null的值:如果存在Intent未携带目标数据的场景,建议将变量声明为可空类型var array_questionContents: Array<String>? = null,后续使用时做非空判断。
  • 传递数组时,确保backendDataQuestions中的数组确实是Array<String>类型,你的代码中这部分是正确的,无需修改。

内容的提问来源于stack exchange,提问作者mi-ned32

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:53:09