0

Я хочу вернуть строковый массив из класса Async обратно в действие, которое вызывает этот асинхронный класс, задачей которого является обратное геокодирование.Зачем нужен размер getFromLocation() равен 0? Как получить адрес от геоинформации? - Android


Так, от моей деятельности я называю конструктор класса, как это:

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

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

И это код класса:

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

Это ловушка:

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 

я правильно широту и долготу точки, как вы можете видеть из Log.d(), НО getFromLocation.size() всегда 0.

+0

addrList = gc.getFromLocation (широта, долгота, 5); – Jamil

+0

Размер по-прежнему равен 0 @Softcoder. – Marialena

+0

Вы тестируете его на устройстве с современными сервисами Google Play? – NitroNbg

ответ

0

Это может быть проблема с GeoCoder службы. Если у вас есть бэкэнд-сервис для устройства, нет или есть другие проблемы, вы получите этот ответ.

использовать isPresent, чтобы проверить, существует ли реализация.

Кроме того, увидеть этот пост здесь:

Geocoder.getFromLocation throws IOException on Android emulator

И документы упоминают, что вам нужна услуга бэкэнда:

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

+0

. Я добавил эту проверку: 'if (gc.isPresent()) {', и геокодер действительно присутствует. Кроме того, я использую геокодер и 'GetFromlocationName()' вместо 'GetFromLocation()' в другой активности, а другой AsyncTask и работает нормально. Но все это решение о 'GetFomLocationName()' использовало также «HttpPost» и т. Д. Я просто не знал, как изменить этот класс, чтобы он работал для 'GetFromLocation()' тоже. – Marialena

Смежные вопросы