为了账号安全,请及时绑定邮箱和手机立即绑定

在 Activity 之间如何传递 LinkedHashMap?

在 Activity 之间如何传递 LinkedHashMap?

不负相思意 2019-03-13 14:15:36
我想在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里的对象,这样子既不用序列化也减少序列化所使用时间
,总之,方便,快捷


查看完整回答
反对 回复 2019-04-28
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-04-28
?
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);


查看完整回答
反对 回复 2019-04-28
  • 4 回答
  • 0 关注
  • 684 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信