listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent it = new Intent(getActivity(), ReleaseDetail.class);
final SerializableMap myMap = new SerializableMap();
myMap.setMap(tempList);// 将map数据添加到封装的myMap中
Bundle bundle = new Bundle();
bundle.putSerializable("map1", myMap);
it.putExtras(bundle);
startActivity(it);
getActivity().finish();
}
});
public class SerializableMap implements Serializable {
private static final long serialVersionUID = 3958588986554810147L;
private Map<String, ReleaseContents> map;
public Map<String, ReleaseContents> getMap() {
return map;
}
public void setMap(Map<String, ReleaseContents> tempMap) {
this.map = tempMap;
}
}
ReleaseContents是一个实体类也实现了Serializable 接口还是报以下错误呢!!!
07-12 12:51:58.093: E/AndroidRuntime(12270): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = XXX.SerializableMap)XXX
查资料说是对象也是要先序列化接口,我ReleaseContents都实现了的呀!请问是哪里错了哦!
黄舟2017-04-17 17:33:33
ReleaseContents
クラスで使用されるクラスも Serializable
インターフェースを実装する必要があります。たとえば、ReleaseContents
クラスが Version
クラスに属性を持っている場合、この Version
クラスはSerializable
インターフェイス。
例に戻ると、ReleaseContents
クラスが Bitmap
クラスの属性を持ち、Bitmap
が Serializable
インターフェースを実装するのではなく、Parcelable
インターフェースを実装することは明らかです。
ringa_lee2017-04-17 17:33:33
従来の Java シリアル化クラスの代わりに Android のシリアル化クラスを使用します。
これは Parcelable です。または、Gson ツールを使用してマップを文字列に変換し、それを渡してマップ
黄舟2017-04-17 17:33:33
map
にはシリアル化を実装するためのインターフェイスがないため、hashmap
を試すことができます。hashmap
は元々 bundle
に保存することもできますし、上記のように parcelable
を使用することもできます。これも速くなります。