Google Places Autocomplete中place.getLatLng()返回null问题求助
解决Autocomplete获取Place后getLatLng()返回null的问题
嗨,作为刚接触Google Maps/Places API的新手,这个问题其实很常见——我当初也踩过一模一样的坑!问题的核心是:你在发起Autocomplete请求时,没有明确要求获取经纬度(LatLng)字段。
为什么会出现这个情况?
Google Places Autocomplete的默认行为是只返回最基础的地点信息(比如名称、ID),像经纬度这类更详细的字段,需要你在请求时主动声明要获取,否则返回的Place对象里就不会包含这些数据,调用getLatLng()自然就会返回null了,而getName()能正常工作是因为名称属于默认返回的基础字段。
具体解决步骤
定义需要获取的字段列表
在启动Autocomplete之前,先声明你需要从Place对象中拿到哪些数据,一定要包含Place.Field.LAT_LNG:// 导入必要的包:import com.google.android.libraries.places.api.model.Place; List<Place.Field> requiredFields = Arrays.asList( Place.Field.NAME, Place.Field.ID, Place.Field.LAT_LNG // 关键:添加这个字段才能获取经纬度 );用字段列表构建Autocomplete Intent
启动AutocompleteActivity的时候,把上面定义的字段列表传给IntentBuilder:Intent autocompleteIntent = new Autocomplete.IntentBuilder( AutocompleteActivityMode.OVERLAY, // 根据你的需求选择合适的模式 requiredFields ).build(this); startActivityForResult(autocompleteIntent, AUTOCOMPLETE_REQUEST_CODE_FROM);修改后的onActivityResult代码(验证)
现在你的原有onActivityResult代码不需要大改,只要确保字段请求正确,place.getLatLng()就能正常返回值了:protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 别忘了调用父类方法! if (requestCode == AUTOCOMPLETE_REQUEST_CODE_FROM) { if (resultCode == RESULT_OK) { Place place = Autocomplete.getPlaceFromIntent(data); Log.i("shipadd", "Place: " + place.getName() + ", " + place.getId()); from_edit_txt.setText(place.getName()); origin = place.getLatLng(); Log.e("origin_destarray", "获取到的经纬度:" + origin); // 现在这里应该能打印出正常的LatLng了 } else if (resultCode == AutocompleteActivity.RESULT_ERROR) { Status status = Autocomplete.getStatusFromIntent(data); Log.i("shipadd", status.getStatusMessage()); } else if (resultCode == RESULT_CANCELED) { // 用户取消操作 } } else if (requestCode == AUTOCOMPLETE_REQUEST_CODE_TO) { if (resultCode == RESULT_OK) { Place place = Autocomplete.getPlaceFromIntent(data); Log.i("shipadd", "Place: " + place.getAddress() + ", " + place.getId()); to_edit_txt.setText(place.getName()); // 如果这里也需要经纬度,同样要在启动To的Autocomplete时添加LAT_LNG字段 } } }
额外提示
如果你还需要其他地点信息(比如完整地址、联系方式),只需要把对应的Place.Field加到字段列表里就行,比如Place.Field.ADDRESS、Place.Field.PHONE_NUMBER等。
内容的提问来源于stack exchange,提问作者Aryan Soni
相关产品推荐
相关产品推荐

