2017-07-08 142 views
12

由于某种原因,最近更改了getMaxAddressLineIndex的实现。现在这种方法返回0为第1行。Android getMaxAddressLineIndex为第1行返回0

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

enter image description here

我不知道这是否是由于谷歌新的API或别的东西。

有人可以请确认我在这里发生了什么?

+1

兄弟,你找到解决方案吗?我得到了同样的问题:( –

+0

@SarinSuriyakoon只有我可以来的解决方案是开始考虑0作为你的第一项,-1意味着没有! – codebased

+0

寻找解决方案:https://stackoverflow.com/questions/45208116/geocoder-返回地址为零长度 –

回答

12

我有同样的问题,这只是一种变通方法。

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

希望这有助于

+2

重申下面的答案** mdicosimo ** 代码行为正确,并返回最大的索引。它不是线数,而是最高有效指数。 (int idx = 0; //注意小于或等于<=不小于< ) idx <= address.getMaxAddressLineIndex(); idx ++){ String line = address.getAddress(idx); }' – user1959190

4

同样的事情发生在我身上。 我核实,开发人员参考(https://developer.android.com/reference/android/location/Address.html#getMaxAddressLineIndex())现在状态:

INT getMaxAddressLineIndex()

目前返回使用量最大的指数,以指定的地址线。如果没有指定地址行,则返回-1。

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

总之,为了安全起见,我会附上getAddressLine(i)try\catch

+0

欣赏此@mdicosimo - 但亲爱的谷歌api版本控制发生了什么?如果现有的api行为随已发布的应用程序发生变化,它不会提供良好的用户体验... – kuruppsify

+0

in一些mi电话返回0.虽然有地方值,sublocality等 – kId

2

我觉得getAddressLine()发生了变化。它用于将单独调用中的地址的各个元素返回到...getAddressLine(0),...getAddressLine(1)等等,最多getAddressLine(n),其中n...getMaxAddressLineIndex()

现在它似乎将整个地址连接并逗号分隔为...getAddressLine(0)...getMaxAddressLineIndex()的调用总是返回0(如果返回地址,则返回-1,如果没有返回地址则返回-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"] 

这似乎是发生在我身上。我已经尝试过Moto G5 PlusAndroid 7三星平板电脑Android 6。我的Android模拟器仍然以旧的方式工作。有人告诉我,如果我弄错了!

注意:在过去,您可以测试i < address.getMaxAddressLineIndex()而不是<=。这仅仅意味着你没有得到最后一个元素,这个元素似乎总是被忽略的国家名称(例如“USA”)。现在.getMaxAddressLineIndex()似乎总是返回零,这将无法正常工作。但是请注意,您将字符串“USA”追加到字符串.getAddressLine(0)

+0

所以不需要使用getAddressLine(i)对吗? – Shruti

相关问题