Geocoder GRPC не удалось

В прошлом месяце геокодер начал каждый раз терпеть неудачу с ошибкой "grpc failed", и я не могу решить ее. Я посмотрел на java.io.IOException: grpc не удалось, но это не решило проблему.

Для проверки кода

Geocoder geocoder = new Geocoder(context, Locale.getDefault());
addresses = geocoder.getFromLocation(lat, lng, 1); // Here if fails with "grpc failed"

У меня был один и тот же код в течение многих лет, но только недавно он перестал работать, когда я перекомпилировал приложение и протестировал его на эмуляторе или реальном устройстве.

Если я скомпилирую с SDK 25, используя инструмент сборки 25, он будет работать на эмуляторе с SDK 25. Но если я попробую на эмуляторе с SDK 24, 26 или любой другой версии SDK, он потерпит неудачу с "grpc failed". Я пытался создать новое виртуальное устройство и т. Д., Но та же проблема.

Понятия не имею, как это исправить и в чем проблема.

Текущая настройка: targetSDK/compileSDK 25, инструмент сборки 25.0.3, Android Studio 2.3.3, обычный эмулятор. (Я пробовал другие инструменты сборки и версии SDK, но проблема все еще остается)

Есть идеи?

5 ответов

Проблема может заключаться в том, что вы пытаетесь использовать Geocoder в главном потоке, если вы используете IntentService, у вас есть этот параметр URL для создания в другом процессе, хотя вы всегда можете использовать Asynctask или аналогичный.

Ну, это может быть слишком поздно, и для кого-то другого, ищущего ответы, в моем случае это была проблема с интернетом. Мое интернет-соединение было плохим

Это связано со службой Google Play на виртуальных устройствах. Используйте API25 и версию 7.1.1 для решения.

Вот примеры;

Когда я пытаюсь включить Genymotion и сервисы Google Play отключены на виртуальном устройстве (ошибка: служба недоступна):

10-07 07:13:30.023 3481-3481/com.unalfaruk.mapexample I/System.out: Your Location: 65.96992333333333 -18.540028333333332
10-07 07:13:30.023 3481-3481/com.unalfaruk.mapexample W/System.err: java.io.IOException: Service not Available
10-07 07:13:30.024 3481-3481/com.unalfaruk.mapexample W/System.err:     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
10-07 07:13:30.024 3481-3481/com.unalfaruk.mapexample W/System.err:     at com.unalfaruk.mapexample.MapsActivity$1.onLocationChanged(MapsActivity.java:71)
10-07 07:13:30.024 3481-3481/com.unalfaruk.mapexample W/System.err:     at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:297)

Когда я пытаюсь включить Genymotion и сервисы Google Play включены (ошибка: сбой grpc):

10-07 07:18:56.325 2694-2694/com.unalfaruk.mapexample I/System.out: Your Location: 65.96669666666666 -15.0
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err: java.io.IOException: grpc failed
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err:     at android.location.Geocoder.getFromLocation(Geocoder.java:136)
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err:     at com.unalfaruk.mapexample.MapsActivity$1.onLocationChanged(MapsActivity.java:71)
10-07 07:18:57.670 2694-2694/com.unalfaruk.mapexample W/System.err:     at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:297)

Когда я пытаюсь запустить AVD Manager и сервисы Google Play включены (нет ошибок):

10-07 14:20:14.769 3159-3159/com.unalfaruk.mapexample I/System.out: Your Location: 37.421998333333335 -122.08400000000002
10-07 14:20:15.220 3159-3159/com.unalfaruk.mapexample I/System.out: Your Adress: Address[addressLines=[0:"1600 Amphitheatre Parkway",1:"Mountain View, CA 94043",2:"USA"],feature=1600,admin=California,sub-admin=null,locality=Mountain View,thoroughfare=Amphitheatre Parkway,postalCode=94043,countryCode=US,countryName=United States,hasLatitude=true,latitude=37.422329,hasLongitude=true,longitude=-122.0843055,phone=null,url=null,extras=null]

У меня есть решение для исключения "java.io.ioexception grpc failed"

Код: попробуйте {Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault ()); Список адресов = геокодер. getFromLocation (широта, долгота, 1); Список адресов список = адреса; Строковый адрес = addresslist.get (0) .getAddressLine (0); Лог.d («добавить», адрес); } catch (IOException e) {e.printStackTrace(); }

Мне удалось исправить аналогичную проблему, добавив

      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

в мой файл манифеста

Другие вопросы по тегам