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

如何在不自定义Place类的情况下传递ArrayList<Place>到另一个Activity?

解决Google Place类跨Activity传递的问题

嘿,这个坑我之前踩过!Google Places SDK里的Place类其实已经实现了Parcelable接口——这才是Android跨组件传递对象的正确打开方式,而你用的Serializable刚好是它不支持的,这就是应用崩溃的原因。完全不用自定义Place类,按下面的方法改代码就行:

第一步:在MainActivity中传递Place列表

把原来依赖Serializable的传递方式,换成Parcelable对应的方法,直接用putParcelableArrayListExtra就行:

private ArrayList<Place> nearbyPlaces;

button_list.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(nearbyPlaces.size() > 0){
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            // 用Parcelable的方式传递列表
            intent.putParcelableArrayListExtra("KEY_NEARBY_PLACES", nearbyPlaces);
            startActivity(intent);
        }
    }
});

第二步:在第二个Activity中接收列表

在目标Activity的onCreate方法里,用getParcelableArrayListExtra获取传递过来的列表:

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

    // 接收Place列表
    ArrayList<Place> receivedNearbyPlaces = getIntent().getParcelableArrayListExtra("KEY_NEARBY_PLACES");
    
    // 接下来就可以正常使用这个列表做逻辑处理了
    if(receivedNearbyPlaces != null && !receivedNearbyPlaces.isEmpty()){
        // 比如遍历列表展示数据
        for(Place place : receivedNearbyPlaces){
            String placeName = place.getName();
            // ... 其他操作
        }
    }
}

补充说明

  • 为什么不用Serializable?因为Google官方的Place类并没有实现Serializable接口,但它实现了Android原生的Parcelable,这也是Android推荐的对象传递方案,效率比Serializable更高。
  • 注意确认你导入的Place类是com.google.android.libraries.places.api.model.Place,别导错其他包的类哦。

内容的提问来源于stack exchange,提问作者David Lafrenière

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:43