4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NotSerializableExceptionで詰まった話

Posted at

現象

SerializableなクラスAAAをArrayListに格納してファイル書き出ししようとしたところ、NotSerializableExceptionが発生しました。
(もちろん、AAAのフィールドも全てSerializable)

そのときのコードは次のようなものです。
(コードがアレなのはお許しください。。。)

Navigator.java
public class Navigator {
    AppCompatActivity activity;


    public void navigateToFuga(ArrayList<AAA> list) {
        // FugaActivity.createIntent内でIntent生成し
        // hogesをファイルに書き出し、ファイルパスをIntentに詰める
        activity.startActivity(FugaActivity.createIntent(activity, list));
    }
}
HogeActivity.java
public void go() {
    navigator.navigateToFuga(new ArrayList<AAA>(){{
        add(bbb.aaa);
    }});
}

解決方法

コードを次のように書き換えました。

HogeActivity.java
public void go() {
    ArrayList<AAA> list = new ArrayList();
    list.add(bbb.aaa);
    navigator.navigateToFuga(list);
}

あとがき

Activityの画面遷移のためにIntentにデータを詰める、ということはよくやるわけですが
Intentに想定外の大容量データを入れたことでアプリがクラッシュしました。
なので、一時的に上のような方法で対応したのですが、まさかの例外で困りました。
デバッガを見ると、
FugaActivity.createIntentで受け取ったArrayListのデータ型が HogeActivity$1 のようなものになっていたので、まさかなぁと思って修正した結果うまくいったという次第です。
解決に数時間を要してしまったので、今後は同じ問題に引っかからないようにしないとですね。

NotSerializableExceptionで調べても同じような原因で悩まれている方がいらっしゃらないようだったので記事に書きましたが、なんと調べればよかったんでしょう。。。

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?