【问题标题】:Android getMaxAddressLineIndex returns 0 for line 1Android getMaxAddressLineIndex 为第 1 行返回 0
【发布时间】:2017-12-12 12:04:54
【问题描述】:

由于某种原因,getMaxAddressLineIndex 的实现最近发生了变化。现在这个方法为第 1 行返回 0。

我有一个现有的代码,它曾经可以工作:i<address.getMaxAddressLineIndex()。但是,它以某种方式被破坏了。

我不知道是因为新的 Google Api 还是其他原因。

有人可以在这里确认一下这是怎么回事吗?

【问题讨论】:

  • 兄弟,你找到解决办法了吗?我遇到了同样的问题:(
  • @SarinSuriyakoon 我能来的唯一解决方案是开始考虑将 0 作为您的第一项,而 -1 表示没有!

标签: android android-location


【解决方案1】:

我遇到了同样的问题,这只是一种解决方法。

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) {}
}

希望有帮助

【讨论】:

  • mdicosimo 重述下面的答案 代码行为正确并返回最大索引。它不是行数,而是最高有效索引。 // Notice less-then-or-equal &lt;= not just less-than &lt; for (int idx = 0; idx &lt;= address.getMaxAddressLineIndex(); idx++) { String line = address.getAddress(idx); }
【解决方案2】:

同样的事情发生在我身上。 我验证了开发人员参考 (https://developer.android.com/reference/android/location/Address.html#getMaxAddressLineIndex()) 现在声明:

int getMaxAddressLineIndex ()

返回当前用于指定地址行的最大索引。如果没有指定地址行,则返回 -1。

所以它似乎反映了新的行为。

无论如何,为了安全起见,我将在try\catch 中附上getAddressLine(i)

【讨论】:

  • 欣赏这个@mdicosimo - 但是亲爱的谷歌API版本控制发生了什么?如果现有的 api 行为随着已发布的应用程序发生变化,它不会提供良好的用户体验 ...
  • 在某些 mi 手机中它返回 0。尽管有局部性、次局部性等值。
【解决方案3】:

我认为getAddressLine() 已经改变了。它用于在对...getAddressLine(0)...getAddressLine(1) 等的单独调用中返回地址的各个元素,直到getAddressLine(n),其中n...getMaxAddressLineIndex()

现在它似乎返回了连接和逗号分隔的整个地址到对...getAddressLine(0) 的调用中,...getMaxAddressLineIndex() 总是返回零(如果返回地址,或者如果没有返回地址,则返回 -1)。

例如,在旧版本中,伦敦议会大厦的lat/long 将返回(对于返回的第一个地址)4 个地址行:

addressLines=[0:"9748 Abingdon Street",1:"Westminster, London",2:"SW1P 3JY",3:"UK"]

现在它返回一行:

addressLines=[0:"9748 Abingdon St, Westminster, London SW1P 3JY, UK"]

这似乎就是发生在我身上的事。我已经在带有 Android 7Moto G5 Plus 和带有 Android 6Samsung 平板电脑上进行了尝试。我的 Android 模拟器仍然以旧方式工作。有人告诉我我是不是搞错了!

注意:过去您可以测试 i &lt; address.getMaxAddressLineIndex() 而不是 &lt;= 。这只是意味着您没有得到最后一个元素,它似乎总是缩写的国家名称(例如“USA”)。现在.getMaxAddressLineIndex() 似乎总是返回零,那是行不通的。但请注意,您会在返回到.getAddressLine(0) 的字符串中附加“USA”。

【讨论】:

    【解决方案4】:

    正如 user8533943 在上面指出的那样,实现已经被偷偷地改变了。但是我认为

    geocoder.getFromLocation()

    改变了它的实现。它返回一个地址列表,每个地址由地址线组成。 但据我所见,当我使用 26 版 SDK 进行编译时,没有返回“地址行”,而是每个地址只返回一行。

    所以如果你只有一个地址,那么

    getMaxAddressLineIndex()

    实际上会返回 0

    如下更新您的实现以使用 比较。

    for(int i = 0; i <= address.getMaxAddressLineIndex(); i++) {
                    addressFragments.add(address.getAddressLine(i));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 2016-10-07
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多