Android 开发默认情况下,Intent 和 Bundle 是不能直接传递 map 对象的。
解决方法:
1、封装 map,实现序列化
/**
* Created by sgll on 2019/1/22.
* 序列化 map, 供 Intent 和 Bundle 传递 map 使用
*/
public class SerializableMap implements Serializable {
private Map<String,Object> map;
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
}
2、传递数据:
Intent intent = new Intent(this, SPTestActivity.class);
Map<String, Object> map = new HashMap<>();
UserModel userModel = new UserModel();
userModel.name = "张三";
map.put("user_key", userModel);
SerializableMap myMap = new SerializableMap();
//将map数据添加到封装的myMap中
myMap.setMap(map);
// Bundle bundle = new Bundle();
// bundle.putSerializable("s_map", myMap);
// intent.putExtras(bundle);
intent.putExtra("s_map", myMap);
3、接收数据:
// Bundle bundle = getIntent().getExtras();
// SerializableMap serializableMap = (SerializableMap) bundle.getSerializable("s_map");
SerializableMap serializableMap = (SerializableMap) getIntent().getSerializableExtra("s_map");
Map<String, Object> map = serializableMap.getMap();
UserModel uss = (UserModel) map.get("user_key");
ToastUtils.toast(this, uss.name);