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

Android开发:无法从Bundle中为LatLng全局变量赋值问题求助

问题与解决方案

问题描述

调试时发现Bundle中存在LatLng数据,但无法将其赋值给全局变量。具体场景:

  • 在InputTempatActivity中,从MapsActivity传入的Bundle获取地址信息生成LatLng对象,再通过Intent将包含该LatLng的Bundle传递到InputKegiatanActivity:
private Agenda agenda;
private Intent intent, intent2;
private Bundle args, args2;
private List<Address> addresses;
private LatLng latLng;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input_tempat);

    intent = getIntent();
    args = intent.getBundleExtra("BUNDLE"); // 来自MapsActivity
    addresses = (List<Address>) args.getSerializable("DetailLokasi");
    latLng = new LatLng(addresses.get(0).getLatitude(), addresses.get(0).getLongitude());

    intent2 = new Intent(InputTempatActivity.this, InputKegiatanActivity.class);
    args2 = new Bundle();

    agenda = new Agenda();

    args2.putSerializable("Agenda", agenda);
    args2.putParcelable("Latlng", latLng);
    intent2.putExtra("BUNDLE", args2);
    startActivity(intent2);
}
  • 在InputKegiatanActivity中接收时,无法将Bundle中的LatLng赋值给全局变量,尝试强制类型转换latLng = (Latlng) args.getParcelable("Latlng")也无效:
private Intent intent;
private Bundle args;
private LatLng latLng;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input_kegiatan);

    intent = getIntent();
    args = intent.getBundleExtra("BUNDLE");
    getAgenda = (Agenda) args.getSerializable("Agenda");
    latLng = args.getParcelable("Latlng");
}

解决方案

1. 修正类型转换的大小写错误

你在强制转换时写错了类名:Latlng是错误写法,正确的类名是**LatLng**(第二个字母L大写)。修正后的代码:

latLng = (LatLng) args.getParcelable("Latlng");

2. 确认LatLng的导入一致性

确保两个Activity中导入的LatLng类是同一个,避免因包路径不同导致类型不匹配:

import com.google.android.gms.maps.model.LatLng;

3. 显式指定泛型类型(Android 12+)

从Android 12开始,Bundle提供了带泛型的安全获取方法,无需手动强制转换,写法更可靠:

latLng = args.getParcelable("Latlng", LatLng.class);

4. 调试验证数据传递状态

可以在接收端添加日志,确认Bundle中是否真的存在有效LatLng数据:

// 检查key是否存在
Log.d("LatLngDebug", "是否包含Latlng:" + args.containsKey("Latlng"));
// 打印获取到的对象内容
Log.d("LatLngDebug", "获取到的LatLng:" + args.getParcelable("Latlng"));

如果日志显示对象为null,需要回溯传递端代码,确认latLng对象本身不为null,且putParcelable的key与接收端完全一致(当前代码中key都是"Latlng",无问题)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:03:14