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
相关产品推荐
相关产品推荐

