Geokoder działał poprawnie do dzisiaj. Zaczął zwracać łańcuch o długości 0. Uwaga: Nie jest to duplikat wątków Geocoder, użyłem usługi intent i AsyncTask, aby uzyskać ją przed uruchomieniem wątku (i metoda AsyncTask działała dobrze przez ponad 8 miesięcy), sprawdzono pod this code i nową code od Google za pomocą FusedLocationProviderClient (jest to oficjalna kod) zwraca również ciąg o zerowej długości. This link z oficjalnej strony systemu Android pokazuje, jak uzyskać to za pomocą usługi intencji.Geokodulator zwraca adres o zerowej długości
Otrzymuję pełny adres w systemie Android 5.1, ale na Androidzie 7.1 zwraca on adres o długości zero.
Kod, którego używałam i pracowałam do dzisiaj.
private void getAddressFromCoordinates() {
new AsyncTask<Void, String, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
addresses.clear();
addresses.addAll(geocoder.getFromLocation(mCurrentLocation.getLatitude(),
mCurrentLocation.getLongitude(), 1));
} catch (IOException e) {
e.printStackTrace();
showToastAsync(getString(R.string.activity_loc_no_location_info));
} catch (IllegalArgumentException illegalArgumentException) {
// Catch invalid latitude or longitude values.
showToastAsync("Invalid latitude or longitude values");
}
// Handle case where no address was found.
if (addresses == null || addresses.size() == 0) {
showToastAsync(getString(R.string.activity_loc_no_address_is_found));
} else {
Address address = addresses.get(0);
ArrayList<String> addressFragments = new ArrayList<String>();
for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
addressFragments.add(address.getAddressLine(i));
}
addressInfo = TextUtils.join(System.getProperty("line.separator"), addressFragments);
addressSingleLine = LocationActivity.addressInfo.replaceAll("[\r\n]+", " ");
}
return null;
}
}.execute();
}
Odpowiedź jest dodanie =
do pętli nie retreive adres z zerowej długości na Androida 7. Nie trzeba tego robić w niektórych wersjach. Brakuje również kodu na stronach Github, do których odsyłają Google. =. Dlatego nie mogłem znaleźć przyczyny.
Tak, = jest to, co powinno być dodane, ale to działa, jeśli nie jest to wersja Androida 7. To bardzo interesujące. Czy ktoś może wyjaśnić, dlaczego działa, jeśli wersja nie jest Anroid 7? – Thracian
Ten sam błąd znaleziono w urządzeniu z uruchomionym 5.1.1 – Kennet
Yeap, który działał. Co za dziwna zmiana w ich API. –