geocoder在kitkat版本

时间:2017-10-04 05:54:55

标签: java android google-maps geolocation geocoding

我在我的Android应用中使用地理编码器来获取使用纬度和经度的国家/地区名称。我发现它在kitkat版本及以下版本中运行良好。但是,当我在上面的版本中测试我的应用程序时,它给出了null。所以我的问题很简单,如何在kitkat版本之上使用地理编码器。 如果还有其他更好的选择而不是地理编码器,请建议我! 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我发布了Geocoder的代码。跟着它

//Keep this GeocodingLocation.java in a separate file. 

    public class GeocodingLocation {

        private static final String TAG = "GeocodingLocation";
        public static void getAddressFromLocation( final String locationAddress,
                                                  final Context context, final Handler handler) {
            Thread thread = new Thread() {
                @Override
                public void run() {
                    Geocoder geocoder = new Geocoder(context, Locale.getDefault());
                    String result = null;
                    String latitude = null;
                    String longitude = null;
                    try {
                        List<Address> addressList = geocoder.getFromLocationName(locationAddress, 1);
                        if (addressList != null && addressList.size() > 0) {

                            Log.e("GeocodingLocation --> getAddressFromLocation ==>" +
                                    addressList.toString());

                            Address address = (Address) addressList.get(0);
                            StringBuilder sb = new StringBuilder();
                            latitude = String.valueOf(address.getLatitude());
                            longitude = String.valueOf(address.getLongitude());

                            Logger.infoLog("GeocodingLocation --> Lat & Lang ==>" + latitude +"  "+longitude);
                            //sb.append(address.getLatitude()).append("\n");
                            //sb.append(address.getLongitude()).append("\n");

                        }
                    } catch (IOException e) {
                        Log.e(TAG, "Unable to connect to Geocoder", e);
                    } finally {
                        Message message = Message.obtain();
                        message.setTarget(handler);
                        if (latitude != null && longitude != null) {
                            message.what = 1;
                            Bundle bundle = new Bundle();
                            bundle.putString("latitude", latitude);
                            bundle.putString("longitude", longitude);
                            message.setData(bundle);
                        } else {
                            message.what = 1;
                            Bundle bundle = new Bundle();
                            result = "Address: " + locationAddress +
                                    "\n Unable to get Latitude and Longitude for this address location.";
                            bundle.putString("address", result);
                            message.setData(bundle);
                        }
                        message.sendToTarget();
                    }
                }
            };
            thread.start();
        }
    }

从你的片段中调用该类。

private void getAddressLatitudeLongitude(String branchAddress) {
        Log.e("getAddressLatitudeLongitude ==>" + branchAddress);

        GeocodingLocation.getAddressFromLocation(branchAddress, thisActivity, new GeocoderHandler());
    }

将此类保留为同一片段中的内部类

private class GeocoderHandler extends Handler {
        @Override
        public void handleMessage(Message message) {
            switch (message.what) {
                case 1:
                    try {
                        Bundle bundle = message.getData();
                        latitude = bundle.getString("latitude");
                        longitude = bundle.getString("longitude");

                        Log.e("CreateBranch --> GeocoderHandler ==>" + latitude + "  " + longitude);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    break;
                default:
                    latitude = null;
                    longitude = null;
            }
            latitudeList.add(latitude);
            longitudeList.add(longitude);

            if(latitude==null || longitude==null){
                showAlertDialog("Please enter correct address", Constants.APP_NAME);
            }

            Log.e("Latitude list =>" + latitudeList);
            Log.e("Longitude list =>" + longitudeList);
        }
    }

输出将获得纬度和经度。希望这个答案有所帮助。