我正在尝试使用以下方法从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上,这应该不重要吗?我可以用浏览器调用该方法。
有什么想法吗?
答案 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);