Geocoder工作正常,直到今天。它开始返回0长度的String。 注意:这不是Geocoder线程的副本,我在启动线程之前使用了intent服务和AsyncTask来获取它(并且AsyncTask方法在8个月内正常工作),检查了this code和新的code谷歌使用FusedLocationProviderClient(这是官方代码)它还返回零长度的字符串。来自官方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 =
添加到for循环,以便不在Android 7上检索长度为零的地址。您不需要在某些版本上执行此操作。此外,Google引用的Github网页上的代码缺少 = 。这就是为什么我无法找到原因的原因。
答案 0 :(得分:8)
问题在于这一行:
for(int i = 0; i&lt; address.getMaxAddressLineIndex(); i ++)
必须是: for(int i = 0; i&lt; = address.getMaxAddressLineIndex(); i ++) 因为getMaxAddressLineIndex返回最大的索引。
答案 1 :(得分:1)
我刚刚在我的代码中注意到了完全相同的问题。显然,这是API中的更改,您可以在documentation中看到。现在getMaxAddressLineIndex()
:
返回当前用于指定地址行的最大索引。如果未指定地址行,则返回-1。
所以你需要按@DavidBar
的建议更改for
循环的条件