【发布时间】:2017-12-25 18:16:39
【问题描述】:
直到今天,Geocoder 工作正常。它开始返回长度为 0 的字符串。 注意:这不是 Geocoder 线程的副本,我在启动线程之前使用了意图服务和 AsyncTask 来获取它(并且 AsyncTask 方法在 8 个月内运行良好),使用 FusedLocationProviderClient 从 Google 检查了this code 和新的code(这是官方代码)它还返回长度为零的字符串。来自Android官方页面的This link显示了如何使用意图服务获取它。
我在 Android 5.1 上获得完整地址,但在 Android 7.1 上它返回长度为零的地址。
我以前使用的代码,直到今天都运行良好。
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();
}
答案是在 for 循环中添加 = 以在 Android 7 上不检索长度为零的地址。您不需要在某些版本上执行此操作。此外,Google 引用的 Github 页面上的代码也缺少 =。这就是为什么我无法找到原因。
【问题讨论】: