myc_100 2013-04-28 09:16 采纳率: 10%
浏览 3539
已采纳

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

  • 写回答

4条回答 默认 最新

  • LeOn 2013-04-29 14:17
    关注

    关于在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里的对象,这样子既不用序列化也减少序列化所使用时间,总之,方便,快捷
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器