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都实现了的呀!请问是哪里错了哦!
ReleaseContents
클래스 아래에 사용되는 클래스도Serializable
인터페이스를 구현해야 합니다. 예를 들어ReleaseContents
클래스에Version
클래스에 속성이 있는 경우 이Version
클래스는 다음을 구현할 수 있습니다.Serializable
인터페이스.귀하의 예로 돌아가면
ReleaseContents
클래스가Bitmap
클래스의 속성을 갖고Bitmap
가Serializable
인터페이스를 구현하지 않고Parcelable
인터페이스를 구현한다는 것이 분명합니다.기존 자바 직렬화 클래스 대신 안드로이드의 직렬화 클래스를 사용하세요
이것을 Parcelable하세요. 또는 Gson 도구를 사용하여 지도를 문자열로 변환한 다음 이를 전달하고 지도로 구문 분석합니다
map
에는 직렬화를 구현할 수 있는 인터페이스가 없으므로hashmap
을 사용해 볼 수 있습니다.hashmap
은 원래bundle
에 저장되거나 위와 같이parcelable
을 사용할 수 있습니다. 또한 더 빠릅니다.CacheUtil을 사용하여 이 지도를 메모리에 저장하세요