Запустить объединенный геокодер местоположения в асинхронную задачу

Я довольно новичок в Android, и теперь я хочу, чтобы мое приложение показывало адрес (из координат (используется слитное местоположение)). в данный момент пользовательский интерфейс зависает, когда я пытаюсь получить адрес и качество мобильной сети плохое. через несколько секунд адрес отображается, но я неt want that the UI is freezing at enduring address receiving. i know async task could help but i donне знаю, как правильно его использовать с API-интерфейсом.

ниже мой экспериментальный код, этот код будет выполняться через
new GetAddressAsyncTask().execute(); в onResume

 class GetAddressAsyncTask extends AsyncTask<Void, void, void> {

    double lat = mLastLocation.getLatitude();
    double lng = mLastLocation.getLongitude();

@Override
    protected Void doInBackground(Void... params) {
        // Do some background work


    Geocoder geoCoder = new Geocoder(MainActivity.this, Locale.getDefault());
    StringBuilder builder = new StringBuilder();
    try {
        List<Address> address = geoCoder.getFromLocation(lat, lng, 1);
        int maxLines = address.get(0).getMaxAddressLineIndex();
        for (int i=0; i<maxLines; i++) {
            String addressStr = address.get(0).getAddressLine(i);
            builder.append(addressStr);
            builder.append(" ");
        }


    } catch (IOException e) {
        // Handle IOException
    } catch (NullPointerException e) {
        // Handle NullPointerException
    }



        return null;
    }

@Override
protected void onPostExecute(String result) {

    String finalAddress = builder.toString(); //This is the complete address.
    addressField.setText(finalAddress); //This will display the final address.

  }
}

0 ответов

Другие вопросы по тегам