【发布时间】:2016-08-05 07:32:00
【问题描述】:
我正在尝试通过 Intent 将两个 ArrayLists 传递给另一个活动。创建了这个类来存储这两个数组。
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 implements Serializable { NonSerializableType field }的类,并且编译得很好。如果field为空,它可能 序列化。或者,如果它是NonSerializableType的子类实例,它确实实现了Serializable。 -
MainActivity$StorageBin表示您的StorageBin嵌套在MainActivity类中,但您没有创建嵌套类static,所以它是一个inner类,这意味着它正在尝试序列化整个MainActivity类。 -
我是否理解正确,如果我的可序列化类中有一个不可序列化的对象,那么我的类也变得不可序列化?
-
@wilkas 正确。我认为
Serializable是您希望类可序列化的标记,而不是保证它可以序列化;而两者之间的区别感觉就像是 Java 内置序列化设计的缺陷。
标签: java android serialization