Подтвердить что ты не робот

Android java.net.UnknownHostException: хост не решен

Этот код не работает:

URL         url   = new URL( xmlPath );
InputSource input = new InputSource( url.openStream() );

все время, приводящее к исключению UnknownHostException, даже когда хост существует, успешно удался с использованием того же кода, если с другого узла разработки (машины), а также из браузера.

Я, вероятно, не в порядке, задав этот вопрос снова, повторю Android java.net.UnknownHostException: Host не решен (вопрос стратегии) ​​. Программное обеспечение форума не позволило бы мне прокомментировать неудовлетворительный ответ на этот вопрос (чтобы уделить больше внимания решению, которое я в конечном итоге нашел). Возможно, я недостаточно популярен, чтобы получить эту привилегию. Тем временем я по существу переписываю вопрос и другой ответ.

В принципе, я согласен с тем, что, возможно, Android-устройство в определенных обстоятельствах испытывает трудности с DNS, но я попытался, например, пример anddev.org о том, как использовать анализатор SAX, и он работал на одной машине я есть, а не на другом.

Изменить: Как уже отмечалось, я знаю рабочий ответ и опубликую его.

Я а) задаю вопрос (который уже был задан и безуспешно ответил) и b) отвечая на него в интересах тех, для кого мой ответ будет полезен.

4b9b3361

Ответ 1

Ответ дьявольски прост: удалите, затем заново создайте свой AVD (виртуальное устройство/эмулятор) в Eclipse. Это сработало для меня - в первый раз.

Ответ 2

Я следил за приведенными выше шагами, но по-прежнему стараюсь не повезло, наконец, я просто понимаю, что мое приложение не позволяет выйти за пределы интернета в эмуляторе. Поэтому просто добавьте права пользователей в файл манифеста. Готово! Благодаря jozsi см. http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device

  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.READ_PHONE_STATE

Ответ 3

В моем случае я загружал XML файл с URL-адреса на моем телефоне, но в этой теме описывал проблему.

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

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

Но мне также нужно

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

В качестве предпосылки для того, чтобы узнать, может ли ваше устройство понадобиться одно и то же, попробуйте перейти к URL-адресу в браузере телефона, чтобы узнать, есть ли подсказки о необходимости использования SD-карты или что-то в этом роде.

Надеюсь, что это поможет другим.

Ответ 4

Я тоже видел это на телефоне (при отладке USB). Решение состояло в том, чтобы отключить WiFi и снова включить его.

Ответ 5

Он работает для меня, добавляя разрешение пользователя для Интернета в AndroidMenifest.xml файле

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

Ответ 6

Вам нужно включить интернет в эмулятор.

  • Открыть эмулятор

  • Нажмите кнопку меню и откройте "настройки"

  • Откройте "wireles and network"

  • Откройте "Мобильные сети"

  • Проверьте "Разрешение данных"

Теперь снова проверьте свое приложение.

Ответ 7

В моем случае проблема была в другом месте. Мне пришлось:

  • добавить <uses-permission android:name="android.permission.INTERNET" />

  • настройте прокси-сервер на моем эмуляторе: Emulator > settings > wireless and network > Mobile Networks > Access Point Name > "the access point you have ;)". Здесь вы можете установить все URL-адрес прокси-сервера и логин/пароль, которые вы хотите.

И

  • Вызовите мою сетевую операцию в отдельном потоке. Простым способом было реализовать AsynchTask.

Я нашел решение здесь:

HTTP не работает в эмуляторе Android

"Это исключение существует по какой-то причине. Активность сети может занять время, выполнение сети в основном потоке, который является тем же самым потоком ответственный за обновление пользовательского интерфейса, заморозит поток до тех пор, пока сетевое взаимодействие (это то, что происходит в каждом потоке, но когда он выполнялся по выделенному потоку, это нормально). В Android, если UI-поток не активен в течение 5 секунд, он покажет, что приложение не отзывчивый, вы хотите закрыть его? Диалог."

Ответ 8

Я не мог избавиться от эмулятора "UnknownHostExceptions" - и браузер эмулятора тоже не получил соединение. Пробовал все предложения, которые я мог найти при переполнении стека и везде.

Наконец, я удалил свой AVD, выключил Eclipse, а затем создал AVD через командную строку. Затем запустили его через командную строку с -dns-server 8.8.8.8. (на моем Mac:./emulator -avd Google-8 -dns-server 8.8.8.8) Наконец-то это сработало!

Надеюсь, это поможет кому-то еще.

Ответ 9

Спасибо тебе так много. Я рад, что ты упорствовал. Я потратил большую часть часа на чтение всех возможных исправлений этой ошибки. Просто для кого-то другого, спотыкающегося по этой теме, я кратко расскажу здесь: -Check Интернет использует разрешение в манифесте -Заключение исключения (бессмысленно) -Изменение настроек брандмауэра в ОС -Закрыть соединение (только окна) И загрузка другого материала

Мое исправление заняло немного больше твоего, но не много. Прочитав сообщение, я закрыл и уничтожил все эмуляторы. Затем я заметил, что, когда я перебрался через кнопку запуска (зеленый круг с белой стрелкой), он сказал, что программа уже запущена, хотя AVD (эмуляторы) не существовали! Во всяком случае, перезапущенное затмение, создал AVD и запустил его, а Боб был моим отцом-братом. Ничего общего с моим кодом или настройкой.

Я нашел это позже. Он вполне может добиться того же, но я не могу ручаться за него, если проблема не повторится. http://www.jiahaoliuliu.com/2011/02/stopping-android-applications-already.html Другим трюком, который/может/достичь того же результата, является галочка "стереть пользовательские данные" в закладке "Запуск конфигурации", вкладку "Цель".

Ответ 10

Моя проблема заключалась в совместном использовании Интернета с компьютера через WIFI, после того как соединение Ethernet было потеряно и снова подключено. Я не мог связаться с телефоном. Это было исправлено путем перезапуска интернет-обмена на компьютере.

Надеюсь, что это поможет кому-то.

Ответ 11

В моем случае я использовал URL-адрес на основе имени хоста с HttpURLConnection. Однако, используя URL-адрес, основанный на IP, проблема была решена. Я также удалил/воссоздал AVD, но это не помогло.

Ответ 12

Я просто перезапускаю AVD и добавляю User Permission, после чего он работает.

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

Ответ 13

проблема решена

запустить cd C:\Program Files\Android\android-sdk\tools

запустить андроид-лист avd в cmd возвращает список ur availabe avd.... в моем случае его Myabc_avd

запустить эмулятор @Myabc_avd -dns-server 8.8.8.8 в cmd... avd покажет avd перейдите в браузер avd и введите www.google.com, чтобы отобразить страницу google. u теперь может обращаться к браузеру с использованием имени хоста, например myfrstapp.com

если все идет хорошо, тогда вы можете запустить проект ur с использованием eclipse, но убедитесь, что он работает в avd, который запускается из cmd.

Ответ 14

В моем случае я только что перезапустил эмулятор, и он сработал.

Ответ 15

Это так просто. Не нужно перезапускать eclipse ИЛИ удалять и создавать эмулятор, вам просто нужно выполнить следующие шаги:

  • Щелкните правой кнопкой мыши на своем проекте
  • Нажмите " Запустить как"
  • Нажмите " Запустить конфигурацию"
  • Окно открывается.
  • В левой панели выберите конфигурацию запуска проекта.
  • Затем на правой панели откройте вкладку Целевая.
  • Прокрутка вниз
  • Вы получите вариант внизу под названием " Аргументы командной строки дополнительного эмулятора"
  • Поместите " -dns-server 8.8.8.8" эти значения (без двойных кавычек) в текстовое поле.

Что это...

Ответ 16

Я столкнулся с этой проблемой, когда я запустил эмулятор, когда я подключился к VPN. Выход из VPN не повлиял, пока я не покинул эмулятор и не перезапустил его. Легко проверить, правильно ли ваш эмулятор правильно разрешает имена - просто перейдите в браузер эмулятора и введите имя хоста веб-сайта.

Ответ 17

Пожалуйста, попробуйте перезагрузить эмулятор.