2017-07-08 101 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

相關問題