Неразрешенный Host Exception для Android - PullRequest
9 голосов
/ 14 июня 2009

Я пытаюсь вызвать веб-сервис RESTful из приложения Android, используя следующий метод:

HttpHost target = new HttpHost("http://" + ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);
HttpGet get = new HttpGet("/list");
String result = null;
HttpEntity entity = null;
HttpClient client = new DefaultHttpClient();
try {
    HttpResponse response = client.execute(target, get);
    entity = response.getEntity();
    result = EntityUtils.toString(entity);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (entity!=null)
        try {
            entity.consumeContent();
        } catch (IOException e) {}
}
return result;

Я могу перейти по адресу и просмотреть результаты в формате xml, используя браузер эмулятора Android и мой компьютер. Я дал моему приложению разрешение ИНТЕРНЕТ.

Я разрабатываю с затмением.

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

Есть идеи?

Ответы [ 4 ]

14 голосов
/ 18 июня 2009

Я думаю, что проблема может быть в первой строке:

new HttpHost("http://" + ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);

Конструктор HttpHost ожидает имя хоста в качестве первого аргумента, а не имя хоста с префиксом "http://".

Попробуйте удалить "http://", и оно должно работать:

new HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);
3 голосов
/ 14 июня 2009

Ошибка означает, что URL не может быть разрешен через DNS. Есть много проблем, которые могут вызвать это. Если вы сидите за прокси-сервером, вы должны настроить его для использования.

HttpHost proxy = new HttpHost(”proxy”,port,”protocol”);
client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

Также убедитесь, что ваше интернет-разрешение выглядит следующим образом

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

Как иногда это не будет работать как пустой тег.

Также посмотрите Сетевой эмулятор и раздел ограничений там

1 голос
/ 17 июня 2009

Я бы дважды проверил, правильно ли установлено сетевое разрешение. Попробуйте что-то простое, как

String address -"http://www.google.com";
URL url = new URL(address);             
InputStream in = url.openStream();

чтобы убедиться, что у вас правильно настроены разрешения.

После этого используйте ваш любимый анализатор протоколов (я поклонник wireshark), чтобы определить, отправляете ли вы нужные пакеты. Я считаю, что вам нужно передать полный URL-адрес HTTPGet, но я уверен только на 80%.

0 голосов
/ 15 ноября 2012

Измените первую строку в вашем коде:

HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...