gpt4 book ai didi

android - Geocoder 在真实设备上返回空列表

转载 作者:太空狗 更新时间:2023-10-29 16:37:39 25 4
gpt4 key购买 nike

我正在尝试使用 NETWORK_PROVIDER 获取国家名称,我写了一个方法

private int getCurrentLocation(Location location) throws IOException {
Geocoder geocoder = new Geocoder(this, getResources().getConfiguration().locale);
List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 5);

String CurrentCountryFullName = addresses.get(0).getCountryName();
if (CurrentCountryFullName != null) {
for (StandartCurrency standartCurrency: RecourcesForStandartCurrencies.getStandartCurrencyList()){
if (RecourcesForStandartCurrencies.getCountryFullName(standartCurrency.getPosition()).toLowerCase().contains(CurrentCountryFullName.toLowerCase()))
return standartCurrency.getPosition();
}
}
return AddedCurrency.getAddedCurrenciesCount();
}

我从中调用这个方法

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
try {
leftFieldIndex = getCurrentLocation(locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER));
} catch (IOException e) {
e.printStackTrace();

我的 AdnroidManifest.xml 包含

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

我正在 Nexus 4 上进行测试,它可以通过 wifi 连接到可用的互联网,但仍然无法正常工作。

最佳答案

Geocoder 不稳定,有时会停止工作。您没有发布错误日志或异常,但根据经验,当 Geocoder 中断时,它只会返回一个空列表。不幸的是,没有办法提前检查 Geocoder 是否工作(只有一种方法可以检查 Geocoder 是否可用,即使它没有工作也会返回 true )

解决方法是在您的 Geocoder 返回空列表时连接到 Google Maps web api。看this post有关代码的示例。您几乎要首先检查从 Geocoder 返回的列表是否为 null 或空,以及它是否使用 AsyncTask 进行网络 api 调用到谷歌地图 api。最终结果是相同的,因此您应该不会注意到功能上的差异。

private int getCurrentLocation(Location location) throws IOException {
Geocoder geocoder = new Geocoder(this, getResources().getConfiguration().locale);
List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 5);
if(addresses != null && addresses.size() > 0 {
//use addresses
} else {
//call web API async task
}

}

根据您对地址所做的操作,将您的 Geocoder 实现分解为一个单独的类可能是有意义的。这样您就可以使用 Interface 将您的 Geocoder 类连接到您的 Activity 或 fragment ,并在您的 AsyncTask web api 调用和Geocoder 应该稍后停止工作(您显然不能在同一方法中返回 AsyncTask 的结果,因为它在方法完成时未交付)

关于android - Geocoder 在真实设备上返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24804982/

25 4 0
文章推荐: android - 如何在 TurnBasedMatch 中获得我自己的参与者 ID?
文章推荐: c - 我是否可以通过将变量设为静态来提高性能?
文章推荐: c - 为什么 printf 有返回值?
文章推荐: html - 使用 CSS 自定义 HTML