Android getMaxAddressLineIndex returns 0 for line 1

别来无恙 提交于 2019-12-21 03:29:23

问题


For some reason the implementation of getMaxAddressLineIndex has recently changed. Now this method returns 0 for line 1.

I have an existing code, which used to work: i<address.getMaxAddressLineIndex(). However, it is broken somehow.

I don't know if it is due to the new Google Api or something else.

Can someone please confirm me here what is going on?


回答1:


I had the same issue and this just a workaround.

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

Hope this help




回答2:


The same happened to me. I verified that Developer Reference (https://developer.android.com/reference/android/location/Address.html#getMaxAddressLineIndex()) now states:

int getMaxAddressLineIndex ()

Returns the largest index currently in use to specify an address line. If no address lines are specified, -1 is returned.

So it seems to reflect the new behaviour.

Anyway, to be safe, I'm going to enclose getAddressLine(i) inside try\catch




回答3:


I think getAddressLine() has changed. It used to return the various elements of the address in separate calls to ...getAddressLine(0), ...getAddressLine(1) and so on up to getAddressLine(n) where n is ...getMaxAddressLineIndex().

Now it seems to return the entire address concatenated and comma-separated into the call to ...getAddressLine(0), and ...getMaxAddressLineIndex() always returns zero (if an address is returned, or -1 if no address returned).

For example, in the old version, the lat/long of the Houses of Parliament in London would return (for the first address returned) 4 address lines:

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

Now it returns one line:

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

That seems to be what happens to me. I've tried it on a Moto G5 Plus with Android 7 and a Samsung tablet with Android 6. My Android emulators still work the old way. Someone tell me if I've got that wrong!

Note: in the past you could test i < address.getMaxAddressLineIndex() rather than <= . This just meant you didn't get the last element, which always seemed to be the abreviated country name (e.g. "USA"). Now that .getMaxAddressLineIndex() always seems to return zero, that won't work. But note you get "USA" appended to the string returned to .getAddressLine(0).




回答4:


As user8533943 has pointed out above the implementation has been changed surreptitiously. However I am of the opinion that

geocoder.getFromLocation()

has changed it's implementation. It returns a list of addresses and each address consists of address lines. But as far as I could see when I compiled with version 26 of the SDK there aren't "address lines" being returned but just one line for every address.

So if you have just one address then

getMaxAddressLineIndex()

would in fact return 0

Update your implementation as follows to use a <= comparison.

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


来源:https://stackoverflow.com/questions/44983507/android-getmaxaddresslineindex-returns-0-for-line-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!