簡體   English   中英

Geocoder在kitkat以上版本的android中不起作用

[英]Geocoder is not working in android above kitkat version

我在android應用程序中與geocoder一起使用以獲取經緯度的國家/地區名稱。 我發現它在kitkat版本及以下版本中運行良好。 但是,當我在上述版本中測試我的應用程序時,它給出的是null。 因此,我的問題很簡單,即如何使用kitkat以上版本的地址解析器。 如果還有其他更好的選擇而不是地址解析器,那么建議我! 提前致謝!

我發布了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);
        }
    }

輸出將獲得經度和緯度。 希望這個答案有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM