java.io.IOException: невозможно разобрать ответ от сервера в getFromLocationName () - PullRequest
6 голосов
/ 31 октября 2011

Я знаю, что вопрос задавался часто раньше, но я не могу найти решение по какому-либо ответу или результатам поиска.Я должен решить эту проблему КАК МОЖНО СКОРЕЕ .. Я пытаюсь получить широту и долготу от адреса, введенного пользователем, но я продолжаю получать:

java.io.IOException: Unable to parse response from server 

Я использую этот код:

        Geocoder geocoder = new Geocoder(this ,Locale.getDefault());
        String newAddress = (String)saveas.getText().toString();
        List<Address> addresses = geocoder.getFromLocationName(newAddress, 1);

Я много пробовал с разными возможными способами, но ничего не работает ... Приложение карты по умолчанию работает хорошо, когда пользователь вводит адрес, он успешно показывает этот адрес на карте. Как я могу сделать то же самое..?

Я добавил все необходимые разрешения и проверяю его на реальном устройстве (версия 2.3) ...

Ответы [ 7 ]

2 голосов
/ 04 октября 2013

Я решил ту же проблему, изменив контекст.

Я использую Fragment, поэтому мой код такой

    public class SearchRoteFragment extends Fragment{

        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.teste_mapa, container, false);
        context = getActivity();
...
}

и когда я вызываю геокод, я делаю это

Geocoder geoCoder = new Geocoder(context, Locale.getDefault());
2 голосов
/ 15 октября 2012

У меня была такая же проблема с моим Samsung Galaxy Tab 10.1.Я часами ищу решение, и ничего не помогло.Чтобы устранить проблемы, попробуйте следующее:

Перейдите в настройки местоположения и включите:

1.Используйте беспроводные сети 2. Используйте спутники GPS

дождитесь определения местоположения GPS

После этого сервер геокодера начинает отвечать.Даже когда я отключил беспроводную связь и GPS-местоположение все еще работает.Я думаю, что геокодер можно использовать, только если вы поделитесь своим местоположением с Google.

2 голосов
/ 16 марта 2012

Вы пробовали через соединение 3G?Я заметил, что если вы отправляете несколько запросов обратной геолокации с Wi-Fi, похоже, что ваш IP блокируется через некоторое время, и обратная геолокация не будет отвечать в течение определенного времени.Переход на 3G заставил запрос работать для меня, когда у меня были подобные проблемы.

1 голос
/ 05 ноября 2011

Это может быть полезно, если вы установите параметр локали при создании геокодера:

yourGeocoder = new Geocoder(this, Locale.CANADA); 

Пожалуйста, замените второй параметр на лучшее значение.

Я думаю, что значение локали по умолчанию можетне соответствует региону карты, который вы используете.

0 голосов
/ 24 января 2014

Я тестировал на Android 2.3.4 и получил исключение «Невозможно разобрать ответ с сервера».

Убедитесь, что ваша карта Google работает, моя не работает!Как только карта Google начала работать, Geocoder был в порядке.

Я переключил «Использовать беспроводные сети» и «Использовать спутники GPS» в настройках «Местоположение и безопасность».

0 голосов
/ 02 мая 2013

Возможно, ваш телефон не подключен и не может получить ответ с сервера.

Как объяснено здесь геокодер

throws IOException if the network is unavailable or any other I/O problem occurs
0 голосов
/ 31 октября 2011

Не знаю, поможет ли это, кстати, ниже приведен фрагмент моего проекта, который работает нормально.

String newAddress = saveas.getText().toString();
searchFromLocationName(newAddress);


private void searchFromLocationName(String name){
 try {
  List<Address> result
  = myGeocoder.getFromLocationName(name, MAX_RESULT);

  if ((result == null)||(result.isEmpty())){
   Toast.makeText(AndroidgetFromLocationNameActivity.this,
     "No matches were found or there is no backend service!",
     Toast.LENGTH_LONG).show();
  }else{

   MyArrayAdapter adapter = new MyArrayAdapter(this,
         android.R.layout.simple_list_item_1, result);
   listviewResult.setAdapter(adapter);

   Toast.makeText(AndroidgetFromLocationNameActivity.this,
     "Finished!",
     Toast.LENGTH_LONG).show();
  }


 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  Toast.makeText(AndroidgetFromLocationNameActivity.this,
    "The network is unavailable or any other I/O problem occurs!",
    Toast.LENGTH_LONG).show();
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...