android - Activity之間傳遞Map<String,Object>
問題描述
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數據添加到封裝的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都實現了的呀!請問是哪里錯了哦!
問題解答
回答1:ReleaseContents類下使用到的類也需要實現Serializable接口,例如你的ReleaseContents類里面有個屬性是Version類,那么這個Version類也許實現Serializable接口。
回到你的例子,很明顯,在ReleaseContents類有個屬性是Bitmap類,Bitmap并沒有實現Serializable接口,而是實現了Parcelable接口。
回答2:使用Android的序列化類,而非是傳統的java序列化類Parcelable 這個。或者利用Gson工具將map轉化成String,然后傳遞再解析成map
回答3:map沒有實現序列化的接口,無法實現序列化,可以嘗試一下hashmap,hashmap原本就可以保存在bundle中,也可像樓上一樣使用parcelable實現這個速度也更快。
回答4:用一個CacheUtil,把這map保存在內存中
相關文章:
