通过Intent传递经纬度对象至Map Activity后变为null的问题求助
解决Intent传递对象时Map Activity接收为null的空指针问题
兄弟,我之前也踩过一模一样的坑!Intent传自定义对象后接收为null,大概率是这几个细节没做好,咱们一步步排查解决:
1. 先确认自定义客户对象是否实现序列化接口
Android里Intent传递自定义对象,必须让对象实现Serializable或者Parcelable接口——系统需要把对象序列化后才能通过Intent传递,没实现的话传过去自然是null。
举个简单的Serializable实现例子:
// 你的客户对象类 public class Customer implements Serializable { private double latitude; private double longitude; // 构造方法、getter/setter方法 public Customer(double latitude, double longitude) { this.latitude = latitude; this.longitude = longitude; } // 省略getLatitude()、getLongitude() }
如果是复杂对象,用Parcelable性能更好,但Serializable对简单场景更省心。
2. 核对Intent传递与接收的键名是否完全一致
很多时候就是键名大小写、拼写错了!比如弹窗里用"CUSTOMER_INFO",接收时写成"customer_info",直接就取不到值。
弹窗类(CustomerPupUp.java)传递代码示例:
// 假设你已经拿到了有效的customer对象 Customer customer = getSelectedCustomer(); // 你的获取逻辑 Intent mapIntent = new Intent(CustomerPupUp.this, MapActivity.class); mapIntent.putExtra("SELECTED_CUSTOMER", customer); // 记好这个键名 startActivity(mapIntent);
地图Activity(MapActivity.java)接收代码示例:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map); // 键名必须和传递时完全一致! Customer receivedCustomer = (Customer) getIntent().getSerializableExtra("SELECTED_CUSTOMER"); if (receivedCustomer != null) { // 拿到经纬度去Google Map标记 double lat = receivedCustomer.getLatitude(); double lng = receivedCustomer.getLongitude(); // 执行地图标记逻辑 } else { // 这里就是你碰到的null情况,先检查键名和序列化 } }
3. 确认启动Activity的上下文是否正确
如果你的弹窗是DialogFragment而非普通Activity,别直接用CustomerPupUp.this当上下文,要换成getActivity():
Intent mapIntent = new Intent(getActivity(), MapActivity.class); mapIntent.putExtra("SELECTED_CUSTOMER", customer); getActivity().startActivity(mapIntent);
4. 排查传递前对象本身是否为null
在弹窗里putExtra之前,先打个日志确认对象本身有效:
Log.d("CustomerPupUp", "准备传递的客户对象:" + customer); if (customer != null) { Log.d("CustomerPupUp", "经纬度:" + customer.getLatitude() + "," + customer.getLongitude()); // 再执行Intent传递 } else { Log.e("CustomerPupUp", "客户对象本身就是null!"); }
如果这里日志显示对象为null,那问题出在弹窗获取客户数据的环节,和Intent传递无关。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

