如何在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(); } }
为什么之前的代码失效?
- 发送端Intent错误:你用
getIntent()获取的是当前Activity被启动时的旧Intent,在它上面添加数据后跳转,会携带冗余数据,导致目标Activity无法正确识别新参数; - 接收端转换冗余:虽然转Object数组的逻辑理论可行,但前提是发送端的Intent传递逻辑正确,而你之前的Intent本身就有问题,自然拿不到数据。
内容的提问来源于stack exchange,提问作者Hector
相关产品推荐
相关产品推荐

