我想将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[]
?
答案 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");
希望这会有所帮助:)