我有一个有效的.Net WCF HTTP服务。如果我将网址放入I.E,FireFox或Google Chrome浏览器,我会收回正确的信息流。但是当我尝试在Android应用程序(在Eclipse中运行)中访问相同的服务时,我得到一个带有详细消息“Permission Denied”的socketException。该服务在我的机器上运行在Visual Studio Web主机中,客户端也在我的机器上的android模拟器中运行。
获得异常的行是: InputStream in = new BufferedInputStream(urlConnection.getInputStream());
(我在同一个程序上有一篇早先的帖子,网址是www.android.com,我收到的网址是“无效的网址”)
可能有人知道为什么浏览器没有问题,Android客户端被拒绝许可? 谢谢, 加里
HttpURLConnection urlConnection = null;
try
{
URL url = new URL("http://localhost:8080/TeamTask/Tasks");
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
答案 0 :(得分:3)
拒绝权限很可能是由于您的AndroidManifest.xml文件中没有权限而导致的。
此外,我还没有对它进行过测试,但我认为使用“localhost”无法启动,因为它在模拟器上运行,就像使用localhost的VM机器指向VM一样,而不是主机 - 放入机器的IP地址。我目前正在同一网络上测试来自不同机器的一些Android HTTP调用,我只是输入服务器的本地IP。
编辑:
最后,这里有一些经过验证的真实代码,我定期用它来进行简单的HTTP调用:
public String getURLcontents(URL url) throws IOException{
String response = "failed";
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
Log.v(TAG, "Opening connection: " + url.toString());
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
response = new Scanner(in).useDelimiter("\\A").next();
}
catch (Exception e) {
urlConnection.disconnect();
return response = "failed";
}
finally {
urlConnection.disconnect();
Log.v(TAG, "Closed connection");
}
return response;
}