简体   繁体   中英

Why result size of getFromLocation() is 0 ? How to get address from geopoint ? - Android

I want to return a string array from Async class back to the activity that is calling this asynchronous class that is job is to do the reverse geocoding.


So, from my activity I call the constructor of the class like this:

Double[] lat_long = new Double[] { Double.parseDouble(map_lat), Double.parseDouble(map_long) };

            ReverseGeocodingTask reverseGeocoding = new ReverseGeocodingTask(getActivity().getApplicationContext());
            reverseGeocoding.execute(lat_long);

And this is the code of the class:

class ReverseGeocodingTask extends AsyncTask<Double, Void, List<String>> {

    public static List<String> LIST = new ArrayList<String>();

    Context mContext;

    public ReverseGeocodingTask(Context context) {
        super();
        mContext = context;
    }
    @Override
    protected List<String> doInBackground(Double... params) {
        Geocoder gc= new Geocoder(mContext, Locale.getDefault());

        List<Address> addrList = null;

        double latitude = params[0].doubleValue();
        double longitude = params[1].doubleValue();

        Log.d("LATLONG", latitude + ":" + longitude);

        try {
            addrList = gc.getFromLocation(latitude, longitude, 1);

            if (addrList.size() > 0) {
                //format location info
                Address address = addrList.get(0);

                LIST.add(address.getLocality());
                LIST.add(address.getSubAdminArea());
                LIST.add(address.getCountryName());

                Log.d("LIST", LIST.get(0));
            }
            else{
                Log.d("addrList SIZE", "=0");
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        return LIST;
    }

    @Override
    protected void onPostExecute(List<String> result) {
        if (result != null) {
            Log.d("ON POST", result.get(0));
        }
    }
}

This is the logcat:

02-28 19:20:04.323  12275-14109/guide_me_for_all.guide_me_for_all D/LATLONG﹕ 34.681377999999995:33.039339
02-28 19:20:05.434  12275-14109/guide_me_for_all.guide_me_for_all D/addrList SIZE﹕ =0

I get correctly the latitude and longitude point as you can see from the Log.d() , BUT getFromLocation.size() is always 0.

This may be a problem with your GeoCoder service. If you're backend service for the device is not present or has other problems, you will get this response.

use isPresent to check if an implementation is present.

Also, see this post here:

Geocoder.getFromLocation throws IOException on Android emulator

And the docs mention that you need a backend service:

http://developer.android.com/reference/android/location/Geocoder.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM