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

如何在Android的Intent中传递与获取二维数组?

解决二维数组通过Intent传递的问题

兄弟,我帮你排查了下代码,问题主要出在发送端的Intent创建逻辑,以及接收端的数组转换方式上,下面是修正后的完整方案:

发送端修正代码

你之前复用了当前Activity的Intent来传递数据,这是错误的——应该创建一个全新的Intent指向目标Activity,同时可以简化Bundle的使用(二维int数组本身支持Serializable,直接传递即可):

i++;
// 核心修正:创建新Intent,指定要跳转的目标Activity(替换成你实际的类名)
Intent tryAgain = new Intent(AnotherActivity.this, TargetActivity.class);
tryAgain.putExtra("index", i);
tryAgain.putExtra("from", "next");
int[][] previousValues = getSelectedIndices();
Toast.makeText(AnotherActivity.this, "Bang " + previousValues[3][3], Toast.LENGTH_SHORT).show();
// 二维int数组默认实现Serializable,直接putSerializable传递
tryAgain.putExtra("array", previousValues);
// 调整顺序:先启动目标页面,再关闭当前页面
startActivity(tryAgain);
AnotherActivity.this.finish();

接收端修正代码

不用绕弯转成Object数组再遍历,直接强转即可(因为int[][]本身是Serializable的实现类):

String fromFlag = getIntent().getStringExtra("from");
if("next".equals(fromFlag)){
    int index = getIntent().getIntExtra("index", 0); // 注意变量名不要和循环i重复
    // 直接强转获取二维数组
    int[][] arrayReceived = (int[][]) getIntent().getSerializableExtra("array");
    // 使用前记得判空,避免空指针异常
    if(arrayReceived != null){
        // 测试验证:比如打印数组内容
        Toast.makeText(this, "收到的数组内容:" + arrayReceived[3][3], Toast.LENGTH_SHORT).show();
    }
}

为什么之前的代码失效?

  1. 发送端Intent错误:你用getIntent()获取的是当前Activity被启动时的旧Intent,在它上面添加数据后跳转,会携带冗余数据,导致目标Activity无法正确识别新参数;
  2. 接收端转换冗余:虽然转Object数组的逻辑理论可行,但前提是发送端的Intent传递逻辑正确,而你之前的Intent本身就有问题,自然拿不到数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:06:38