未解决的主机异常Android

时间:2009-06-14 14:06:10

标签: java android rest

我正在尝试使用以下方法从Android应用程序调用RESTful Web服务:

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;

我可以浏览地址并使用Android Emulator浏览器和我的机器查看xml结果。我已经给了我的应用程序INTERNET权限。

我正在开发eclipse。

我已经看到它提到我可能需要配置一个代理但由于我正在调用的Web服务是在端口80上,这应该不重要吗?我可以用浏览器调用该方法。

有什么想法吗?

4 个答案:

答案 0 :(得分:14)

我认为问题可能在第一行:

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

HttpHost构造函数需要将主机名作为其第一个参数,而不是具有"http://"前缀的主机名。

尝试删除"http://",它应该有效:

new HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);

答案 1 :(得分:3)

错误表示无法通过DNS解析URL。这可能是导致这种情况的许多问题。如果您坐在代理后面,则应将其配置为使用。

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

同时检查您的internetpermission是否如此

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

有时它不会作为空标记。

另请查看Emulator Networking及其中的限制部分

答案 2 :(得分:1)

我会仔细检查是否正确设置了网络权限。尝试基本的东西,如

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

验证您是否已正确设置权限。

之后使用你最喜欢的协议分析仪(我是一个wirehark粉丝)来判断你是否发送了正确的数据包。我相信您需要将完整的URL传递给HTTPGet,但我只有80%的确定。

答案 3 :(得分:0)

更改代码中的第一行:

HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);