5

こんにちは、putExtras() に入れることでインテントに渡したいクラスに問題があります。そのシリアル化可能で、コードは次のようになります。

public abstract class ObjectA extends ArrayList<ObjectA> implements java.io.Serializable{...}

public class ObjectB extends ObjectA {...}


...
Bundle extras = new Bundle();
extras.putSerializable("blabla", ObjectB);
intent.putExtras(extras);

...

Object y = getIntent().getExtras().get("blabla");

問題は、y が ArrayList になり、ObjectB ではなくなったため、キャストできないことです。コードを次のように変更すると、

public class ObjectB implements java.io.Serializable {...}

それは正常に動作します

4

4 に答える 4

14

クラスに java.util.List と java.io.Serializable の両方を実装すると、このAndroid バグが発生します。

于 2009-11-16T17:22:06.250 に答える
0

ObjectBをバンドルに渡す前に、どのように宣言しますか?私があなたの質問について理解していることから、バンドルを渡すときにエラーが発生することはなく、バンドルを削除するときにのみエラーが発生します。次のように、ObjectBをObjectBタイプに直接取得してみてください。

ObjectB y = (ObjectB) getIntent().getExtras().get("blabla");
于 2009-10-20T14:00:55.573 に答える
0

ObjectAinArrayListは interface を実装する必要がありますParcelable。その後、配列リストをインテントに入れて、別のアクティビティで取得できます。

于 2009-12-12T07:37:16.090 に答える
0

ObjectB をシリアライズ可能として宣言していないため、最新の親オブジェクトに「フォールバック」していると思われます。したがって、バンドルに入れるとき、実際には ObjectB に入れるのではなく、ObjectB を ArrayList にキャストします。

2番目の(「正常に動作する」)コードを使用する必要があると思います。

于 2009-10-12T23:37:08.917 に答える