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 python动态规划:N根火柴摆出的最大数字
  • ¥20 (标签-excel)
  • ¥200 求idea10和MyEclipse7.1
  • ¥20 vb6.0截取当前窗体保存为jpg文件
  • ¥20 苹果手机不使用大疆sdk怎么获取遥控器控制信息或如何接入大疆sdk并且成功上架sdk
  • ¥20 woocommerce 注册按键重定向
  • ¥100 求书法图像文字切割代码
  • ¥15 同一个波形探测距离不同的目标,为什么fft之后得到的频谱图会发生移动,不应该时移不改变幅度谱吗(标签-matlab)(相关搜索:matlab仿真)
  • ¥15 Proteus仿真程序只能执行一次
  • ¥15 语音识别websocket报错