猿问

在 Activity 之间如何传递 LinkedHashMap?

我想在activities 之间传递 LinkedHashMap,代码如下:
Activity A

LinkedHashMap 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 B

Bundle 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?


不负相思意
浏览 685回答 4
4回答

慕斯709654

关于在Activity之间传对像,最好的方法就是共享内存。设计一个类作为单例模式,如下public&nbsp;class&nbsp;Share&nbsp;{ private&nbsp;static&nbsp;Share&nbsp;current; public&nbsp;static&nbsp;Share&nbsp;getInstance()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;synchronized&nbsp;(Share.class)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(current&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;=&nbsp;new&nbsp;Share(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;current; &nbsp;&nbsp;&nbsp;&nbsp;} } final&nbsp;HashMap<String,&nbsp;Object>&nbsp;memoryMap; public&nbsp;Share()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;memoryMap&nbsp;=&nbsp;new&nbsp;HashMap<String,&nbsp;Object>(); } public&nbsp;void&nbsp;put(String&nbsp;key,&nbsp;Object&nbsp;value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;memoryMap.put(key,&nbsp;value); } public&nbsp;Object&nbsp;get(String&nbsp;key)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;memoryMap.get(key); }}然后在Activity1里传一个key字符串值到Activity2里,再在Activity2里去获取Share里的对象,这样子既不用序列化也减少序列化所使用时间 ,总之,方便,快捷

慕桂英546537

如果是同一个进程中且即传即用,可考虑直接用全局变量静态变量,即直接在ActivityB定义public static LinkedHashMap mLinkedHashMap,然后在ActivityA中直接写ActivityB. mLinkedHashMap= xxx赋值,在ActivityB启动时直接读取mLinkedHashMap。由于传过去之后马上就使用,因此不用担心内存不足被释放之类的问题。如果是不同进程,就只能做系列化反系列化了。

Helenr

只能转化到HashMap,转化会失败我传个字符串转为HashMap成功了,一步到位好像有难度,你再加油摸索一下(你若传对象,那个class像似要继承Serializable接口)//mainActivity2if&nbsp;(getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP")&nbsp;!=&nbsp;null){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;bundle2&nbsp;=&nbsp;this.getIntent().getExtras(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashMap<String,&nbsp;Object>&nbsp;&nbsp;&nbsp;user_info&nbsp;=&nbsp;(HashMap<String,&nbsp;Object>)&nbsp;bundle2.getSerializable("OBJECTS_LINKED_HASHMAP"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;user_info.toString(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Got&nbsp;str:"+str);&nbsp;//&nbsp;Got&nbsp;str:{TEST=this&nbsp;is&nbsp;a&nbsp;test} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//mainActivity1LinkedHashMap&nbsp;mLinkedHashMap&nbsp;=&nbsp;new&nbsp;LinkedHashMap<String,&nbsp;Object>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mLinkedHashMap.put("TEST",&nbsp;"this&nbsp;is&nbsp;a&nbsp;test"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;bundle&nbsp;=&nbsp;new&nbsp;Bundle(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bundle.putSerializable("OBJECTS_LINKED_HASHMAP",&nbsp;mLinkedHashMap);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intent&nbsp;intent&nbsp;=&nbsp;new&nbsp;Intent(this,&nbsp;UserActivity.class);&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intent.putExtras(bundle); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startActivity(intent);
随时随地看视频慕课网APP

相关分类

Java
我要回答