Geocoder devuelve una dirección con longitud cero
Geocoder estaba trabajando bien hasta hoy. Comenzó a devolver String con longitud 0. Nota: Esto no es un duplicado de los hilos de Geocoder, utilicé el servicio de intención y AsyncTask para obtenerlo antes de iniciar el hilo (y el método AsyncTask estaba funcionando bien durante 8 meses), marcó este código y el nuevo código de Google con FusedLocationProviderClient Código) también devuelve cadena con longitud cero. Este enlace de la página oficial de Android muestra cómo obtenerlo con el servicio de intenciones.
Tengo la dirección completa en Android 5.1, pero en Android 7.1 devuelve una dirección con longitud cero.
- ¿Por qué FusedLocationApi.getLastLocation null
- Cómo encontrar la distancia correcta entre dos geopuntos en el mapa?
- ¿Puede DataBinding interferir con la localización de una actividad?
- Comparando dos ubicaciones usando sus longitudes y latitud
- GeoFence no activado con ubicación falsa
Código que solía usar y funcionó bien hasta hoy.
private void getAddressFromCoordinates() { new AsyncTask<Void, String, Void>() { @Override protected Void doInBackground(Void... params) { try { addresses.clear(); addresses.addAll(geocoder.getFromLocation(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude(), 1)); } catch (IOException e) { e.printStackTrace(); showToastAsync(getString(R.string.activity_loc_no_location_info)); } catch (IllegalArgumentException illegalArgumentException) { // Catch invalid latitude or longitude values. showToastAsync("Invalid latitude or longitude values"); } // Handle case where no address was found. if (addresses == null || addresses.size() == 0) { showToastAsync(getString(R.string.activity_loc_no_address_is_found)); } else { Address address = addresses.get(0); ArrayList<String> addressFragments = new ArrayList<String>(); for (int i = 0; i < address.getMaxAddressLineIndex(); i++) { addressFragments.add(address.getAddressLine(i)); } addressInfo = TextUtils.join(System.getProperty("line.separator"), addressFragments); addressSingleLine = LocationActivity.addressInfo.replaceAll("[\r\n]+", " "); } return null; } }.execute(); }
La respuesta es añadir =
a para que el bucle no recupere una dirección con longitud cero en Android 7. No es necesario que realices esto en algunas versiones. También el código en páginas referenciadas de Github de Google está faltando. Por eso no pude encontrar la razón.
- OnLocationChanged sólo se llama una vez, no se actualiza
- Esperando hasta que la ubicación esté encendida después de encenderla a través de la alerta de servicios de ubicación
- Google Selector de lugares no se está lanzando en teléfonos Android Mi
- Servicios de Google Play: ¿cómo comprobar si hay una devolución de llamada pendiente pendiente "activa" registrada en las actualizaciones de ubicación / reconocimiento de actividad?
- Android Smart Location Library siempre está conectado a los gps después de la aplicación cerrada
- Android Location Manager, Obtener ubicación GPS, si no hay GPS, luego llegar a la ubicación del proveedor de red
- Android LocationClient.getLastLocation () devuelve la ubicación antigua e inexacta con una nueva marca de tiempo
- Android Location Client no puede resolver el método
El problema es esta línea:
Para (int i = 0; i <address.getMaxAddressLineIndex (); i ++)
Debe ser: for (int i = 0; i <= address.getMaxAddressLineIndex (); i ++) Debido a que getMaxAddressLineIndex devuelve el índice más grande.
Acabo de notar el mismo problema en mi código hace un tiempo. Aparentemente se trata de un cambio en la API como se puede ver en la documentación . Ahora getMaxAddressLineIndex()
:
Devuelve el índice más grande actualmente en uso para especificar una línea de dirección. Si no se especifica ninguna línea de dirección, se devuelve -1.
Por lo que necesita cambiar la condición de su bucle for
según lo sugerido por @DavidBar
- Osmdroid: ¿Cómo puedo crear y cargar un mapa de mis propios mapas de bits (mosaicos)?
- Cómo detener BroadcastReceiver manualmente en android