アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

[Android]Androidのバージョンの違いで配列のSerialize時にClassCastExceptionが起きる

Activityに値を渡して画像を表示させようと思った。Twitter4Jを使っていた。
tweetはtwitter4j.Status

シリアライズ
Bundle bundle = new Bundle();
bundle.putSerializable("ExtendedMediaEntities", tweet.getExtendedMediaEntities());
....


シリアライズ
Bundle bundle = getIntent().getExtras();
ExtendedMediaEntity[] mediaEntities = (ExtendedMediaEntity[])bundle.getSerializable("ExtendedMediaEntities");

と書いた所Android5.0.2のSO-02gでは意図した通りに動いたが、Android4.2.2のFJL22ではClassCastExceptionが発生した。

java.lang.Object[] cannot be cast to twitter4j.ExtendedMediaEntity[]

軽く調べたけれど原因は不明。 Twitter4JのExtendedMediaEntitiesだけじゃなくて他のでもなのかとか後で調べたい

対処方法

配列ではなくコレクションを使った。

シリアライズ
Bundle bundle = new Bundle();
bundle.putSerializable("ExtendedMediaEntities", new ArrayList<>(Arrays.asList(tweet.getExtendedMediaEntities())));
....


シリアライズ
Bundle bundle = getIntent().getExtras();
ArrayList<ExtendedMediaEntity> mediaEntities = (ArrayList<ExtendedMediaEntity>)bundle.getSerializable("ExtendedMediaEntities");