Integer []在Intent#putExtra(...)中不起作用

时间:2012-06-12 11:27:37

标签: android arrays android-intent extra

我想将int[]放入Android Intent。出于各种原因,我得到LinkedList<Integer>,所以我尝试(大致)这个:

LinkedList<Integer> myList = getIntegerList();
Intent intent = new Intent (context, class);
intent.putExtra("com.me.INTARRAY",  myList.toArray());

这不起作用,因为toArray()给了我一个Object[]。我以为我可以通过做

来解决它
intent.putExtra("com.me.INTARRAY", (Integer[]) myList.toArray(new Integer[myList.size()]) )

确实产生Integer[];但是,从Intent STILL中取出它是行不通的。

最终使用for循环来解决这个问题并不困难,所以我要求更多的好奇心而不是其他任何原因,但是......你如何将Integer[]变成Intent 1}}额外好像是int[]

2 个答案:

答案 0 :(得分:3)

我没有彻底测试过这个,但我相信它应该可行。你可以尝试一下。

Integer[] integerArray = {/*something */ };
intent.putExtra("com.me.INTARRAY",  integerArray);

然后(不工作)

Integer [] newArray =(Integer [])getIntent()。getSerializableExtra(“com.me.INTARRAY”);

修改 啊......经过一些研究和测试后,上面似乎可能。这是不可能的,因为编译器必须迭代每个元素来验证强制转换。一个解决方案(我这次尝试过)将改为:

Object[] s = (Object[]) getIntent().getSerializableExtra("com.me.INTARRAY");
Integer[] newArray = Arrays.copyOf(s, s.length, Integer[].class);

我在这里找到了解释:Deserializing Arrays on Android

答案 1 :(得分:0)

您可以将数组更改为int [],并使用putExtra(java.lang.String, int[])将其作为额外内容传递。另一方面,您需要使用getIntArrayExtra获得额外的额外费用。

以下是正常工作的代码,首先是来电者,接收者是:

LinkedList<Integer> myList = getIntegerList();;
int iArray[] = new int[myList.size()];
for (Integer i : myList)
iArray[myList.indexOf(i)] = i;
Intent intent = new Intent();// create your actual intent
intent.putExtra("com.your.package.name.int", iArray);
startActivity(intent);

和另一方:

int array[] = getIntent().getExtras().getIntArray("com.your.package.name.int");

另一个替代方案(我猜这更好)是将LinkedList转换为Integer ArrayList。这样做如下,发送者第一个接收者跟随。

intent.putIntegerArrayListExtra("com.your.package.name.array", new ArrayList<Integer>(myList));

另一方面:

ArrayList<Integer> array = getIntent().getExtras().getIntegerArrayList("com.your.package.name.array");

希望这会有所帮助:)