UnknownHostException генерируется в приложении для Android, если вместо IP-адреса используется имя хоста - PullRequest
2 голосов
/ 23 мая 2011

У меня есть следующий код, который я использую для отправки запроса на сервер.

String inputXML = createInputXML(searchText);
HttpClient httpclient = new DefaultHttpClient();
String url = "http://mysite.com/action";//Works fine if I use IP address directly,for eg:http://1.2.3.4/action
HttpPost httppost = new HttpPost(url);
HttpResponse response=null;
StringEntity se = null;
try {
    se = new StringEntity(inputXML, HTTP.UTF_8);
} catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
se.setContentType("text/xml");  
httppost.setHeader("Content-Type","application/xml;charset=UTF-8");
httppost.setEntity(se);  
try {
    response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Когда я запускаю программу на эмуляторе, я получаю исключение UnKnownHostException в строке

response = httpclient.execute(httppost);

Если я использую IP-адрес напрямую вместо имени хоста, запрос отправляется правильно. Обратите внимание на следующие моменты:

  1. Я использую Android 2.3.3
  2. Я добавил <uses-permission android:name="android.permission.INTERNET"></uses-permission> в манифесте xml
  3. Настройки прокси обновляются в APN эмулятора.
  4. Используя браузер в эмуляторе, я могу получить доступ к веб-сайту с именами их хостов.

Есть идеи, почему это вызывает проблемы?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Пожалуйста, убедитесь, что вы выполнили все шаги 1-4 user700284, описанные в его Вопросе.

HttpClient client = new DefaultHttpClient();


//Get the default settings from APN (could be also hard coded stuff)
  String proxyHost = android.net.Proxy.getDefaultHost();
  int proxyPort = android.net.Proxy.getDefaultPort();
//Set Proxy params of client, if they are not the standard
    if (proxyHost != null && proxyPort > 0) {
        HttpHost proxy = new HttpHost(proxyHost, proxyPort);
        client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    }
HttpGet request = new HttpGet("http://www.google.com");
0 голосов
/ 23 мая 2011

URL не имеет ничего общего со строкой

se = new StringEntity(inputXML, HTTP.UTF_8);

Вы уверены, что это эта строка?

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