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

时间:2016-04-16 04:30:52

标签: android google-maps-android-api-2 google-geocoder

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

 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");
        }

    }

您的支持将不胜感激。

2 个答案:

答案 0 :(得分:0)

根据documentation<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> <to value="def@gmail.com" /> <from value="xyz@gmail.com" /> <subject value="Error logging message" /> <smtpHost value="smtp.gmail.com" /> <port value="587"/> <authentication value="Basic" /> <username value="abc@gmail.com"/> <password value="password"/> <EnableSsl value="true" /> <bufferSize value="512" /> <lossy value="false"/> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="WARN" /> </evaluator> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" /> </layout> </appender> 的调用可以抛出geocoder.getFromLocationName或返回空列表。两种情况都会导致您的应用崩溃我打赌这个清单是空的。

守护你的代码:

IllegalArgumentException

答案 1 :(得分:0)

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

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