アンドロイド:インテントに組み込まれたシリアル化可能なオブジェクトに関する問題

StackOverflow https://stackoverflow.com/questions/1548489

質問

こんにちは私はクラスに問題があります私はそれを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 {...}

それはうまくいきます

役に立ちましたか?

解決

クラスに java.util.List と java.io.Serializable の両方を実装すると、これがトリガーされます。 アンドロイドのバグ.

他のヒント

私は何が起こっているのか疑うあなたはそれが最も最近の親オブジェクトに「フォールバック」だとして、シリアライズをObjectBに宣言されていないので、ということです。あなたがバンドルにそれを置くときですから、実際にObjectBにに入れていないが、ObjectBには、ArrayListに戻ってキャストします。

私はあなたが(「正常に動作」)は、第2のコードと一緒に行く必要があるとしていると考えています。

あなたがバンドルにそれを渡す前に、どのようにあなたがObjectBに宣言されていますか? あなたがバンドルに渡すとき、私はあなたの質問を理解して何から、あなたはそれを削除した場合にのみ、エラーを取得されていません。 このように直接をObjectBタイプにあなたをObjectBをretreivingしてみます:

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

ObjectAArrayListは、インタフェースParcelableを実装する必要があります。その後、あなたは意志であなたのArrayListを置くことができ、かつ、他の活動にそれらを得ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top