Android getMaxAddressLineIndex возвращает 0 для строки 1

По какой-то причине реализация getMaxAddressLineIndex недавно изменилась. Теперь этот метод возвращает 0 для строки 1.

У меня есть существующий код, который работал: i<address.getMaxAddressLineIndex(). Однако это как-то сломается.

введите описание изображения здесь

Я не знаю, связано ли это с новым Google Api или чем-то еще.

Может кто-нибудь, пожалуйста, подтвердите меня здесь, что происходит?

Ответ 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) {}
}

Надеемся на эту помощь

Ответ 2

То же самое случилось со мной. Я подтвердил, что в описании разработчика (https://developer.android.com/reference/android/location/Address.html#getMaxAddressLineIndex()) говорится:

int getMaxAddressLineIndex()

Возвращает наибольший индекс, используемый в настоящее время, для указания адресной строки. Если строки адреса не указаны, возвращается -1.

Таким образом, это, кажется, отражает новое поведение.

В любом случае, чтобы быть в безопасности, я собираюсь заключить getAddressLine(i) внутри try\catch

Ответ 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"]

Кажется, что со мной происходит. Я пробовал это на Moto G5 Plus с Android 7 и планшетом Samsung с Android 6. Мои эмуляторы Android по-прежнему работают по-старому. Кто-то скажет мне, если я ошибаюсь!

Примечание: в прошлом вы могли протестировать i < address.getMaxAddressLineIndex(), а не <=. Это означало, что вы не получили последний элемент, который всегда казался сокращенным названием страны (например, "США" ). Теперь, когда .getMaxAddressLineIndex() всегда, кажется, возвращает ноль, это не сработает. Но учтите, что вы добавили "USA" к строке, возвращенной в .getAddressLine(0).