使用地理编码器输入无效或空位置时应用程序崩溃

App Crashes when entering invalid or null location using geocoder

我一直在研究 google 地图并希望用户可以使用地理编码访问位置,虽然它正在工作但是当用户在编辑文本中输入无效位置或空位置时出现问题,我的应用程序得到坠毁。 这是我的代码:(点击搜索按钮)

 public void onSearch(View view) {
        EditText addressSearch = (EditText) findViewById(R.id.edtSearchAddress);
        String location = addressSearch.getText().toString();
        List<Address> addressList = null;
        if (location != null || !location.equals("")) {
            addressSearch.setText("");
            Geocoder geocoder = new Geocoder(this, Locale.getDefault());

            try {
                addressList=  geocoder.getFromLocationName(location, 7);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // location exists
            Address address = addressList.get(0);
            LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
            map.addMarker(new MarkerOptions().position(latLng).title("Find Pro"));
            map.animateCamera(CameraUpdateFactory.newLatLng(latLng));

        } else {
            addressSearch.setText("Location does not exist");
        }

    }

我们将不胜感激。

根据documentation geocoder.getFromLocationName 的调用可以抛出 IllegalArgumentException 或 return 空列表。这两种情况都会使您的应用程序崩溃。我敢打赌列表是空的。

所以保护好你的代码:

 if (addressList.size() > 0) {
      Address address = addressList.get(0);
      LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
      map.addMarker(new MarkerOptions().position(latLng).title("Find Pro"));
      map.animateCamera(CameraUpdateFactory.newLatLng(latLng));
 }

当你传递 null 值时 addressList return 0 值所以请在从 addressList 获取值之前设置 IF 条件。

if (addressList.size() > 0) {
Address address = addressList.get(0);
}