いつもお世話になっております。
早速本題に入らせていただきます。
本日質問させて頂きたいのは下記コードとなります。
Java
1public class TestFragment { 2 3 private static final String ITEMS = "ITEMS"; 4 5 public void onSaveState(Bundle out) { 6 // 保持 7 out.putSerealizable(ITEMS, Serializer.serializeObject(adapterInfo)); 8 } 9 10 public void onRestoreState(Bundle in) { 11 // 復元したつもりが adapterInfoはNULLになっていた 12 adapterInfo = (HashMap<Integer, TestAdapter>) Serializer.deserializeObject(in.get(ITEMS)); 13 } 14 15 // 保持したいデータ形式 16 private static HashMap<Integer, TestAdapter> adapterInfo = null; 17 18 // ↑のTestAdapterの中身 19 private class TestAdapter { 20 TestItemBean itemSet; 21 TestItemAdapter testItemAdapter; 22 } 23 24}
AndroidStudio では画面を回転した際などにデータを保持しておくために Bundle に格納するかと思うのですが、
特殊な形式というか複雑な形式の値の保持の仕方が分かりません。
今回だと
Java
1HashMap<Integer, TestAdapter>
この型のデータを保持して回転後に復元したいのですが、
以下のように保持して↓
Java
1public void onSaveState(Bundle out) { 2 // 保持してみる 3 out.putSerealizable(ITEMS, Serializer.serializeObject(adapterInfo)); 4}
保持したデータを復元してみても結果はNULLでした。(悲しみ)
Java
1public void onRestoreState(Bundle in) { 2 // 復元したつもりが adapterInfoはNULLになっていた 3 adapterInfo = (HashMap<Integer, TestAdapter>) Serializer.deserializeObject(in.get(ITEMS)); 4}
Serialize と Deserialize のやり方がまずい?のかなぁとは思っているのですが・・・
HashMap<> 型のデータは保持できないなんてことはないですよね・・・?
質問が長くなってしまい申し訳ありませんが、
お時間ある方いらっしゃいましたらご助力頂けますと幸いです。
試行錯誤中1
あれ、そもそも 格納してるときにエラー出てるじゃん・・・
java.io.NotSerializableException: com.cli.main.view.TestFragment$TestAdapter
HashMapがシリアライズできないんじゃなくて TestAdapterにシリアライズするためのやつ入れなきゃいけないのか
試行錯誤中2
TestAdapter に Serealizable を実装してみた。
Java
1private class TestAdapter implements Serializable{ 2 TestItemBean itemSet; 3 TestItemAdapter testItemAdapter; 4}
今度は TestAdapter の中の TestItemAdapter に同じエラーが出た。 (進歩)
java.io.NotSerializableException: com.cli.main.view.TestItemAdapter
試行錯誤中3
なんかSerializableがどうたらとかそういう問題じゃないような気がしてきた
NotSerializableExceptionが止まらない・・・
うーんTestAdapterをそのまま保持しておこうっていうのが無謀だったのか・・・
java.io.NotSerializableException: com.android.internal.policy.PhoneLayoutInflater
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。