将Android App连接到安静的Web服务

时间:2015-01-21 20:20:44

标签: java android web-services rest tomcat

我知道这已被问了很多次,但是我无法找到我的问题的正确答案,希望你们中的一个可以帮助我; - )

我试图通过智能手机设备上的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;
        }
    }
  • 我尝试连接时使用了几种不同的方法,总是导致连接超时
  • 我在我的应用中包含了互联网权限。
  • 我暂时停用了Windows PC上的本地防火墙。
  • 我尝试了设备的端口转发
  • 我尝试在应用httpbin.org/ip内调用其他网络服务并获得有效回复。

有什么想法吗?问题似乎与本地网络有关.. 如果我想通过我的Android设备连接到外部服务器,是否需要特殊限制或权限? 提前致谢; - )

1 个答案:

答案 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;
    }
}