【问题标题】:Integer[] not working in Intent#putExtra(...)Integer[] 在 Intent#putExtra(...) 中不起作用
【发布时间】:2012-06-12 11:27:37
【问题描述】:

我想将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 中取出仍然不起作用。

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

【问题讨论】:

    标签: android arrays android-intent extra


    【解决方案1】:

    我没有对此进行彻底的测试,但我相信它应该可以工作。你可以试试看。

    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

    【讨论】:

    • 当。 for 然后循环!
    【解决方案2】:

    您可以将数组更改为 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");
    

    希望这会有所帮助:)

    【讨论】:

    • 我并不害怕,因为这正是我尝试过的,但失败了。最后我使用了for 循环将LinkedList 的元素插入到数组中。
    • @Andrew Wyld:恐怕你用错了。它用于 int[] 而不是 Integer[]。我在最后尝试了它并且工作正常。还将编辑我的帖子为您添加示例代码。
    • @AndrewWyld:第二种选择会让你摆脱循环。如果这对您有帮助并且对您有用,请记住接受答案:)
    • 这正是我所做的。我想知道你是否可以在不这样做的情况下获得数组。
    • 我没有做的是转换数组。我希望不必创建一个全新的数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多