one number mismatchedinputexception method least from exc deserialize databind creator cannot argument although android location location-provider

android - number - IllegalArgumentException: el proveedor no existe: null en Maps V1



no int int argument constructor factory method to deserialize from number value (3)

Estoy usando la API de Google Maps V1. Tengo este error:

java.lang.IllegalArgumentException: provider doesn''t exisit: null

Este es mi código:

locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); String provider = locationManager.getBestProvider(criteria, true); if (provider != null) { startTime = System.currentTimeMillis(); geoLocTimeOutTask = new GeoLocTimeOutTask(); geoLocTimeOutTask.execute(); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); } else { geoLocCallbackObj.geoLocationCallback(tagCallback); }

Entiendo el error, pero mi pregunta es, ¿por qué el dispositivo me puso este error? ¿Y cómo puedo evitar esto por favor?


Cuando el proveedor no es compatible, obtiene un error, la forma más sencilla de deshacerse de este problema es utilizar un criterio.

locationManager.requestLocationUpdates(locationManager.(new Criteria(),true), 0, 0, locationListener);

En el codigo

criterios - los criterios que deben ser emparejados

El segundo arg que es un booleano:

enabledOnly: si es verdadero, solo se devuelve un proveedor actualmente habilitado


Está solicitando actualizaciones del proveedor de la red cuando ese proveedor no existe en el dispositivo. Puede reemplazar estas dos líneas:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

con

locationManager.requestLocationUpdates(provider, 0, 0, locationListener);

Ya ha hecho el esfuerzo de encontrar el mejor proveedor que el dispositivo ofrece para sus criterios, de modo que es el que debe utilizar.

Alternativamente, compruebe que el proveedor existe antes de registrarse para recibir actualizaciones de él:

if (locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER)) locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER)) locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

También estás usando cero para el tiempo y la distancia mínima. Esto es perfecto para probar en un dispositivo virtual, pero recuerde cambiarlos cuando use un dispositivo real, de lo contrario, la carga de la batería será alta.


se sugirió que se corrigiera esto sería usar la nueva API de ubicación en lugar de la anterior http://developer.android.com/google/play-services/location.html

Pero en realidad todo lo que tienes que hacer es hacer una comprobación.

if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); }

Si el proveedor no está habilitado, no pasará ni se bloqueará.