我知道这已被问了很多次,但是我无法找到我的问题的正确答案,希望你们中的一个可以帮助我; - )
我试图通过智能手机设备上的Android应用程序与其他网络服务进行通信(因此没有模拟器)。
Web服务正在Windows机器上的192.168.0.2:8080
上运行。
该设备连接在与pc相同的wlan网络中。
当我使用设备的Chrome浏览器打开链接时,网络服务会正常响应。
这是我用来连接AsyncTask中的webservice的代码:
protected Integer doInBackground(String... params)
{
try
{
AndroidHttpClient client = AndroidHttpClient.newInstance("androidClient", getContext());
HttpPost post = new HttpPost(params[0]);
String xml = new ScoreDto(new Random(System.currentTimeMillis()).nextLong()).toXml();
post.setEntity(new StringEntity(xml));
return client.execute(post).getStatusLine().getStatusCode();
}
catch (Exception e)
{
Log.e(TAG, e.getLocalizedMessage());
return 0;
}
}
httpbin.org/ip
内调用其他网络服务并获得有效回复。有什么想法吗?问题似乎与本地网络有关.. 如果我想通过我的Android设备连接到外部服务器,是否需要特殊限制或权限? 提前致谢; - )
答案 0 :(得分:0)
感谢所有发表评论的人试图提供帮助
我弄清楚出了什么问题:
帖子请求缺少content-type
标题...
功能齐全的doBackground
- 实施情况如下:
protected Integer doInBackground(String... params)
{
try
{
//TODO check if params.length >=2 & not empty
AndroidHttpClient client = AndroidHttpClient.newInstance("androidClient", getContext());
HttpPost post = new HttpPost(params[0]);
post.setHeader("content-type", "application/xml");
post.setEntity(new StringEntity(params[1]));
return client.execute(post).getStatusLine().getStatusCode();
}
catch (Exception e)
{
Log.e(TAG, e.getLocalizedMessage());
return 0;
}
}