2つのArrayListsをIntent経由で別のアクティビティに渡そうとしています。これらの2つの配列を格納するためにこのクラスを作成しました。なぜSerializableを実装するオブジェクトのシリアル化が例外をスローしますか?
public class StorageBin implements Serializable {
//storage variables
public ArrayList<String> placesList;
public ArrayList<LatLng> latLngArrayList;
public void storeData(ArrayList<String> names, ArrayList<LatLng> locations) {
placesList = names;
latLngArrayList = locations;
}
}
私は次のように意図しています。
StorageBin storageBin = new StorageBin();
storageBin.storeData(placesList, latLngArrayList);
intent.putExtra("storedData", storageBin);
最後の行は以下の例外を引き起こします。私は間違って何をしていますか?
FATAL EXCEPTION: main
Process: lt.wilkas.isimintinosvietoves, PID: 24702
java.lang.RuntimeException: Parcelable encountered IOException writing
serializable object (name = lt.wilkas.isimintinosvietoves.MainActivity$StorageBin)
at android.os.Parcel.writeSerializable(Parcel.java:1468)
...
'Serializable'は、実際には直列化可能性を保証しません。 'class MyClassがSerializable {NonSerializableType field}'を実装しているクラスを簡単に書くことができ、それはうまくコンパイルされます。また、 'field'がnullの場合、*シリアル化する可能性があります。または、 'Serializable'を実装している' NonSerializableType'のサブクラスのインスタンスである場合。 –
'MainActivity $ StorageBin'は、あなたの' StorageBin'が 'MainActivity'クラスの中でネストされているが、ネストされたクラスを' static'にしなかったので、* inner *クラスであることを意味します。 'MainActivity'クラス全体 – Andreas
シリアライズ可能クラスにオブジェクトがあり、シリアライズ可能でない場合は、クラスもシリアライズできないことを正しく理解していますか? – wilkas