IllegalArgumentException:提供者在地图V1上不存在:null

我正在使用Google Maps API V1。 我有这个错误:

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

这是我的代码:

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

我明白错误,我的问题是,我的设备把我这个错误? 我该怎么避免这个呢?

Solutions Collecting From Web of "IllegalArgumentException:提供者在地图V1上不存在:null"

当设备上不存在提供商时,您正在从networking提供商请求更新。 您可以replace这两行:

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

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

您已经努力寻找设备为您的标准提供的最佳提供商,以便使用该标准。

或者,在注册更新之前检查提供者是否存在:

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

您也使用零时间和最小距离。 这是在虚拟设备上进行testing的最佳select,但请记住在使用真实设备时要更改它们,否则电池消耗将会很高。

build议是解决这个问题将是使用新的位置API而不是旧的http://developer.android.com/google/play-services/location.html

但是真的你只需要做一个检查

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

如果供应商没有启用,那么它不会通过,不会崩溃

当提供者不被支持,你会得到一个错误,最简单的方法来摆脱这个问题是使用一个标准。

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

在代码中

标准 – 需要匹配的标准

第二个arg是一个布尔值:

enabledOnly – 如果是true,则只返回当前启用的提供者