0

int[]Androidインテントに入れたいです。さまざまな理由で私はを取得している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[]入るのですか?Intentint[]

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);

私はここで説明を見つけました: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");

もう1つの方法(私が推測する方が良い)は、LinkedListをIntegerArrayListに変換することです。これは次のように機能し、送信者が最初に受信者が続きます。

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 に答える