0

Androidアプリでオブジェクトを別のjava.util.Stackオブジェクトに渡そうとしています。Activity

私のやり方は、StackクラスがSerializableインターフェースを実装し、オブジェクトを介してオブジェクトを渡すという事実を使用することですIntent

奇妙なことgetSerializableExtra(...)に、他のオブジェクトで使用するActivityと、オブジェクトのクラスがからStackに変更されましたArrayList

インターネットではそれについて何も見つかりませんでした。それがそのように振る舞う理由について何か考えがありますか?

ありがとう

これがそのことを再現する簡単なコードです(私はandroid 2.3.3と4.0.3で試しました):

クラスA:

package my.test;

import java.util.Stack;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class A extends Activity {

    Stack<Integer> stack;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        stack = new Stack<Integer>();
        stack.push(42);
        stack.push(7);

        Log.i("Class of stack in A (1)",stack.getClass().getName());

        Intent i = new Intent(this,B.class);
        i.putExtra("stack", stack);

        Log.i("Class of stack in A (2)",i.getSerializableExtra("stack").getClass().getName());

        startActivity(i);

    }
}

クラスB:

package my.test;

import java.io.Serializable;
import java.util.Stack;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class B extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent i = getIntent();
        Serializable s = i.getSerializableExtra("stack");

        Log.i("class of stack in B",s.getClass().getName());

        Stack<Integer> stack = (Stack<Integer>) s;
    }
}

の出力Log.i(...)

04-20 15:36:56.596: I/Class of stack in A (1)(748): java.util.Stack
04-20 15:36:56.596: I/Class of stack in A (2)(748): java.util.Stack
04-20 15:36:56.736: I/class of stack in B(748): java.util.ArrayList
4

1 に答える 1

0

ありがとうエイダンク。まさにこのバグを引き起こしているようです: http://code.google.com/p/android/issues/detail?id=3847

于 2012-05-03T15:09:45.770 に答える