Метод обратного вызова onError никогда не вызывается?
В моем приложении я использую фрагмент автозаполнения Google для преобразования местоположения из политического имени в координаты лан-лона.
Однако, если у меня нет интернет-адреса, откуда Фрагмент может получить свои предложения, Фрагмент показывает сообщение об ошибке пользователю. НЕ вызывает onError
функция обратного вызова, определенная в его PlaceSelectionListener
как и было заявлено в API Google Адресов.
Это проблема. У меня есть локальная база данных, в которой я храню предыдущие данные, которые я хотел бы использовать в качестве резервной копии на случай, если у меня нет Интернета, но это, по сути, оставляет мне UX-дружественный способ показать это. Пользователь должен либо помять TRY AGAIN
кнопку или щелчок, и даже когда он это делает, фрагмент автозаполнения размещения не дает мне информацию в его TextView.
Мой вопрос: как я могу сделать onError
запустите или, альтернативно, как получить информацию из текстового представления фрагмента.
Пример кода:
private void setupGooglePlaceSearchBar(){
autocompleteFragment = (PlaceAutocompleteFragment)
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
currentCity = place.getName().toString();
currentLatLong = new double[]
{place.getLatLng().latitude, place.getLatLng().longitude};
}
@Override
public void onError(Status status) {
// TODO: Handle the error.
currentCity = "wrong";
alert("Can't process this location. Please ensure you're connected to the internet.");
//findViewById(R.id.root).requestFocus();
System.out.println(status.getStatusMessage());
}
});
}
Если у меня есть интернет, onPlaceSelected
работает нормально. Если у меня нет интернета, onError
не запускается.
Дальнейшая правильная или неправильная обработка выполняется в родительской активности onResume
, За исключением того, что я не могу выполнить какую-либо обработку, если я не знаю, что набрал пользователь, потому что поле удаляется после уничтожения оверлея.