Java 未解决的主机异常

Java 未解决的主机异常,java,android,rest,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 Defau

我尝试使用以下方法从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结果。我已授予我的应用程序互联网权限

我正在使用eclipse进行开发

我看到它提到我可能需要配置一个代理,但由于我调用的web服务位于端口80上,所以这不重要,对吗?我可以使用浏览器调用该方法


有什么想法吗?

该错误意味着无法通过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>

因为有时它不能作为空标签工作


另外,请查看此处的限制部分

我将再次检查网络权限设置是否正确。尝试一些基本的东西,比如

String address -"http://www.google.com";
URL url = new URL(address);             
InputStream in = url.openStream();
验证您的权限设置是否正确


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

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

new HttpHost("http://" + ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);
HttpHost
构造函数要求主机名作为其第一个参数,而不是带有
“http://”前缀的主机名

尝试删除http://“
,它应该可以工作:

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

更改代码中的第一行:

HttpHost(ServiceWrapper.SERVER_HOST,ServiceWrapper.SERVER_PORT);

代理设置并不重要,除非你的设备在代理服务器后面。这就是我的想法。我仍然无法让它工作。我不确定代理设置,因为我只点击了端口80,模拟器的浏览器可以调用Web服务。当使用普通的HttpGet(“http://host/path”)时,我做到了这一点Eclipse似乎没有把这个XML标记放进去。非常感谢。对,我可以用这个方法把数据拿回来。然而,我不明白为什么原始代码不能工作。我也没在Fiddler身上看到任何东西!此方法是调用REST web服务的有效方法吗?例如,将输入流转换为字符串?这是一个非常简单的方法,但根据您的操作可能已经足够了。我不熟悉fiddler,但我不确定它是否与包嗅探器相同。我猜URL或主机是错误的。我会尝试传递完整的URL(“http://“+ServiceWrapper.SERVER_HOST+“//”列表),看看这是否有帮助。Fiddler是一个Web调试代理(即用于分析http流量的http代理服务器),因此不是包嗅探器。