首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IllegalArgumentException:提供程序不存在:在地图V1上为空

IllegalArgumentException:提供程序不存在:在地图V1上为空
EN

Stack Overflow用户
提问于 2013-12-18 22:17:00
回答 2查看 21.9K关注 0票数 25

我使用的是Google Maps API V1。我有这个错误:

代码语言:javascript
复制
     java.lang.IllegalArgumentException: provider doesn't exisit: null

这是我的代码:

代码语言:javascript
复制
    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); 

    }

我理解这个错误,但我的问题是,设备是怎么把这个错误放在我身上的?我怎样才能避免这种情况呢?

EN

回答 2

Stack Overflow用户

发布于 2013-12-18 22:39:53

当设备上不存在网络提供商时,您正在向该网络提供商请求更新。您可以替换这两行:

代码语言:javascript
复制
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

使用

代码语言:javascript
复制
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);

你已经找到了设备为你的标准提供的最好的供应商,所以这就是你要使用的。

或者,在注册来自提供程序的更新之前检查提供程序是否存在:

代码语言:javascript
复制
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);

您还使用零表示时间和最小距离。这对于在虚拟设备上测试是完美的,但请记住在使用真实设备时更改它们,否则电池消耗将很高。

票数 61
EN

Stack Overflow用户

发布于 2013-12-18 22:39:07

建议的解决方法是使用新的location API而不是旧的http://developer.android.com/google/play-services/location.html

但实际上你要做的就是检查一下

代码语言:javascript
复制
if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}

如果提供程序未启用,则它不会通过,也不会崩溃

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20660561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档