You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Activity之间传递HashMap<String, Object>类型数据?

Android Activity间传递HashMap<String,Object>崩溃解决方案

崩溃根因

  • 发送和接收的序列化类型不匹配:发送时将HashMap强转为Parcelable存入Intent,接收时调用getSerializableExtra读取,类型不一致触发运行时类型转换异常。
  • 强转逻辑不符合类实现规则:HashMap本身默认实现Serializable接口,并不实现Parcelable接口,发送时的强转操作本身就会触发运行时异常。

修复方案

直接使用Serializable方式传递即可,Firestore返回的标准Map类型内的基础值、Timestamp等官方类型默认都支持序列化,修改代码如下:

发送端修改

public final static String doctorDataKEY = "asLSAD654sdf";

Intent intent = new Intent(this, Activity_Doctor.class);
// 改为强转Serializable(HashMap原生支持该接口)
intent.putExtra(doctorDataKEY, (Serializable) data);
startActivity(intent);

接收端修改

private Map<String, Object> doctorData = new HashMap<>();

final Intent intent = getIntent();
// 增加类型校验和空判断,避免空指针或类型转换异常
Serializable extraData = intent.getSerializableExtra(Activity_Doctor_Login.doctorDataKEY);
if (extraData instanceof Map) {
    doctorData = (Map<String, Object>) extraData;
}

兜底兼容方案

如果你的Map中包含自定义JavaBean类型,或遇到序列化失败的情况,可以用JSON中转的方式传递,稳定性更高:

发送端

Gson gson = new Gson();
String dataJson = gson.toJson(data);
intent.putExtra(doctorDataKEY, dataJson);

接收端

Gson gson = new Gson();
String dataJson = intent.getStringExtra(Activity_Doctor_Login.doctorDataKEY);
if (dataJson != null) {
    Type mapType = new TypeToken<HashMap<String, Object>>(){}.getType();
    doctorData = gson.fromJson(dataJson, mapType);
}

注意事项

如果Map中的value包含自定义JavaBean,需要保证该Bean类实现Serializable接口,或在JSON序列化时做好自定义类型适配。

内容的提问来源于stack exchange,提问作者Xin Nian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:48:04