我想在activities 之间传递 LinkedHashMap,代码如下:Activity ALinkedHashMap mLinkedHashMap = new LinkedHashMap<String, Object>();
// setting data in map
Bundle bundle = new Bundle();
bundle.putSerializable("OBJECTS_LINKED_HASHMAP", mLinkedHashMap);
Intent intent = new Intent(this, ActivityB.class);
intent.putExtras(bundle);
startActivity(intent);在 Activity 中当接受包对象时,却获取"Class cast exception" 错误信息Activity BBundle bundle = this.getIntent().getExtras();
LinkedHashMap mLinkedHashMap = new LinkedHashMap<String, Object>();
mLinkedHashMap = (LinkedHashMap<String, Object>) bundle.getSerializable("OBJECTS_LINKED_HASHMAP");获得异常:ClassCastException: java.util.HashMap cannot be cast to LinkedHashMap我查相关资料得知 LinkedHashMap 也实现 Serializable 接口。我使用 LinkedHashMap 保持对象的顺序。在 Activity 之间如何传递 LinkedHashMap?
4 回答
慕斯709654
TA贡献1840条经验 获得超5个赞
关于在Activity之间传对像,最好的方法就是共享内存。
设计一个类作为单例模式,如下
public class Share { private static Share current; public static Share getInstance() { synchronized (Share.class) { if(current == null) { current = new Share(); } return current; } } final HashMap<String, Object> memoryMap; public Share() { memoryMap = new HashMap<String, Object>(); } public void put(String key, Object value) { memoryMap.put(key, value); } public Object get(String key) { return memoryMap.get(key); }
}
然后在Activity1里传一个key字符串值到Activity2里,再在Activity2里去获取Share里的对象,这样子既不用序列化也减少序列化所使用时间 ,总之,方便,快捷
慕桂英546537
TA贡献1848条经验 获得超10个赞
如果是同一个进程中且即传即用,可考虑直接用全局变量静态变量,即直接在ActivityB定义public static LinkedHashMap mLinkedHashMap,然后在ActivityA中直接写ActivityB. mLinkedHashMap= xxx赋值,在ActivityB启动时直接读取mLinkedHashMap。由于传过去之后马上就使用,因此不用担心内存不足被释放之类的问题。
如果是不同进程,就只能做系列化反系列化了。
Helenr
TA贡献1780条经验 获得超4个赞
只能转化到HashMap,转化会失败
我传个字符串转为HashMap成功了,一步到位好像有难度,你再加油摸索一下
(你若传对象,那个class像似要继承Serializable接口)
//mainActivity2
if (getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP") != null){ Bundle bundle2 = this.getIntent().getExtras(); HashMap<String, Object> user_info = (HashMap<String, Object>) bundle2.getSerializable("OBJECTS_LINKED_HASHMAP"); String str = user_info.toString(); System.out.println("Got str:"+str); // Got str:{TEST=this is a test} }
//mainActivity1
LinkedHashMap mLinkedHashMap = new LinkedHashMap<String, Object>(); mLinkedHashMap.put("TEST", "this is a test"); Bundle bundle = new Bundle(); bundle.putSerializable("OBJECTS_LINKED_HASHMAP", mLinkedHashMap); Intent intent = new Intent(this, UserActivity.class); intent.putExtras(bundle); startActivity(intent);
添加回答
举报
0/150
提交
取消