0

我想将一个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[]; 但是,将其从IntentSTILL 中取出是行不通的。

最终,使用循环解决这个问题并不太难,for所以我比任何其他原因都更加好奇,但是......你如何让Integer[]一个Intent额外的,就好像它是一个int[]

4

2 回答 2

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

于 2012-06-12T12:16:28.320 回答
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");

希望这可以帮助 :)

于 2012-06-12T11:38:21.640 回答