Android getMaxAddressLineIndex returns 第 1 行为 0
Android getMaxAddressLineIndex returns 0 for line 1
出于某种原因,getMaxAddressLineIndex 的实现最近发生了变化。现在此方法 returns 0 用于第 1 行。
我有一个可用的现有代码:i<address.getMaxAddressLineIndex(
)。但是,它以某种方式被破坏了。
不知道是因为新的Google Api还是别的原因。
有人可以在这里向我确认发生了什么事吗?
我也遇到过同样的情况。
我验证了开发者参考 (https://developer.android.com/reference/android/location/Address.html#getMaxAddressLineIndex()) 现在指出:
int getMaxAddressLineIndex ()
Returns 当前用于指定地址行的最大索引。如果未指定地址行,则返回 -1。
所以它似乎反映了新的行为。
无论如何,为了安全起见,我将 getAddressLine(i)
包含在 try\catch
中
我遇到了同样的问题,这只是一个解决方法。
if (address.getMaxAddressLineIndex() > 0) {
for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
addressFragments.add(address.getAddressLine(i));
}
} else {
try {
addressFragments.add(address.getAddressLine(0));
} catch (Exception ignored) {}
}
希望对您有所帮助
我认为 getAddressLine()
已经改变了。它曾经在对 ...getAddressLine(0)
、...getAddressLine(1)
等的单独调用中 return 地址的各个元素,直到 getAddressLine(n)
其中 n
是 ...getMaxAddressLineIndex()
.
现在似乎 return 整个地址连接并以逗号分隔进入对 ...getAddressLine(0)
的调用,并且 ...getMaxAddressLineIndex()
始终 return 为零(如果地址是 returned,如果没有地址 returned,则为 -1)。
例如,在旧版本中,伦敦议会大厦的 lat/long
将 return(对于第一个地址 returned)4 个地址行:
addressLines=[0:"9748 Abingdon Street",1:"Westminster, London",2:"SW1P 3JY",3:"UK"]
现在 return 一行:
addressLines=[0:"9748 Abingdon St, Westminster, London SW1P 3JY, UK"]
我好像就是这样。我已经在 Moto G5 Plus 和 Android 7 和 Samsung 上试过了Android 6 的平板电脑。我的 Android 模拟器仍然以旧方式工作。有人告诉我我是否理解错了!
注意:过去您可以测试 i < address.getMaxAddressLineIndex()
而不是 <=
。这只是意味着你没有得到最后一个元素,它似乎总是缩写的国家名称(例如 "USA")。现在 .getMaxAddressLineIndex()
似乎总是 return 零,那是行不通的。但请注意,您将 "USA" 附加到字符串 returned to .getAddressLine(0)
.
正如 user8533943 上面指出的那样,实施已被秘密更改。但是我认为
geocoder.getFromLocation()
已更改其实现。它 return 是一个地址列表,每个地址都由地址行组成。
但据我所知,当我使用 SDK 版本 26 进行编译时,没有 "address lines" 被 returned,而是每个地址只有一行。
因此,如果您只有一个地址,那么
getMaxAddressLineIndex()
实际上 return 0
按如下方式更新您的实施以使用 <= 比较。
for(int i = 0; i <= address.getMaxAddressLineIndex(); i++) {
addressFragments.add(address.getAddressLine(i));
出于某种原因,getMaxAddressLineIndex 的实现最近发生了变化。现在此方法 returns 0 用于第 1 行。
我有一个可用的现有代码:i<address.getMaxAddressLineIndex(
)。但是,它以某种方式被破坏了。
不知道是因为新的Google Api还是别的原因。
有人可以在这里向我确认发生了什么事吗?
我也遇到过同样的情况。 我验证了开发者参考 (https://developer.android.com/reference/android/location/Address.html#getMaxAddressLineIndex()) 现在指出:
int getMaxAddressLineIndex ()
Returns 当前用于指定地址行的最大索引。如果未指定地址行,则返回 -1。
所以它似乎反映了新的行为。
无论如何,为了安全起见,我将 getAddressLine(i)
包含在 try\catch
我遇到了同样的问题,这只是一个解决方法。
if (address.getMaxAddressLineIndex() > 0) {
for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
addressFragments.add(address.getAddressLine(i));
}
} else {
try {
addressFragments.add(address.getAddressLine(0));
} catch (Exception ignored) {}
}
希望对您有所帮助
我认为 getAddressLine()
已经改变了。它曾经在对 ...getAddressLine(0)
、...getAddressLine(1)
等的单独调用中 return 地址的各个元素,直到 getAddressLine(n)
其中 n
是 ...getMaxAddressLineIndex()
.
现在似乎 return 整个地址连接并以逗号分隔进入对 ...getAddressLine(0)
的调用,并且 ...getMaxAddressLineIndex()
始终 return 为零(如果地址是 returned,如果没有地址 returned,则为 -1)。
例如,在旧版本中,伦敦议会大厦的 lat/long
将 return(对于第一个地址 returned)4 个地址行:
addressLines=[0:"9748 Abingdon Street",1:"Westminster, London",2:"SW1P 3JY",3:"UK"]
现在 return 一行:
addressLines=[0:"9748 Abingdon St, Westminster, London SW1P 3JY, UK"]
我好像就是这样。我已经在 Moto G5 Plus 和 Android 7 和 Samsung 上试过了Android 6 的平板电脑。我的 Android 模拟器仍然以旧方式工作。有人告诉我我是否理解错了!
注意:过去您可以测试 i < address.getMaxAddressLineIndex()
而不是 <=
。这只是意味着你没有得到最后一个元素,它似乎总是缩写的国家名称(例如 "USA")。现在 .getMaxAddressLineIndex()
似乎总是 return 零,那是行不通的。但请注意,您将 "USA" 附加到字符串 returned to .getAddressLine(0)
.
正如 user8533943 上面指出的那样,实施已被秘密更改。但是我认为
geocoder.getFromLocation()
已更改其实现。它 return 是一个地址列表,每个地址都由地址行组成。 但据我所知,当我使用 SDK 版本 26 进行编译时,没有 "address lines" 被 returned,而是每个地址只有一行。
因此,如果您只有一个地址,那么
getMaxAddressLineIndex()
实际上 return 0
按如下方式更新您的实施以使用 <= 比较。
for(int i = 0; i <= address.getMaxAddressLineIndex(); i++) {
addressFragments.add(address.getAddressLine(i));