android - Activity之間傳遞Map<String,Object>
問(wèn)題描述
listview.setOnItemClickListener(new OnItemClickListener() {
@Overridepublic 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數(shù)據(jù)添加到封裝的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是一個(gè)實(shí)體類也實(shí)現(xiàn)了Serializable 接口還是報(bào)以下錯(cuò)誤呢!!!
07-12 12:51:58.093: E/AndroidRuntime(12270): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = XXX.SerializableMap)XXX查資料說(shuō)是對(duì)象也是要先序列化接口,我ReleaseContents都實(shí)現(xiàn)了的呀!請(qǐng)問(wèn)是哪里錯(cuò)了哦!
問(wèn)題解答
回答1:ReleaseContents類下使用到的類也需要實(shí)現(xiàn)Serializable接口,例如你的ReleaseContents類里面有個(gè)屬性是Version類,那么這個(gè)Version類也許實(shí)現(xiàn)Serializable接口。
回到你的例子,很明顯,在ReleaseContents類有個(gè)屬性是Bitmap類,Bitmap并沒(méi)有實(shí)現(xiàn)Serializable接口,而是實(shí)現(xiàn)了Parcelable接口。
回答2:使用Android的序列化類,而非是傳統(tǒng)的java序列化類Parcelable 這個(gè)。或者利用Gson工具將map轉(zhuǎn)化成String,然后傳遞再解析成map
回答3:map沒(méi)有實(shí)現(xiàn)序列化的接口,無(wú)法實(shí)現(xiàn)序列化,可以嘗試一下hashmap,hashmap原本就可以保存在bundle中,也可像樓上一樣使用parcelable實(shí)現(xiàn)這個(gè)速度也更快。
回答4:用一個(gè)CacheUtil,把這map保存在內(nèi)存中
相關(guān)文章:
