从Android设备向本地服务器发出HTTP请求

时间:2016-01-04 13:28:54

标签: java android rest http tomcat

我想通过HTTP请求从Android应用程序提供RESTful服务。为了开发,我在eclipse和SQLite数据库中设置了一个Tomcat服务器。从简单的Java客户端应用程序到localhost:80的HTTP请求工作正常:我可以验证新条目是否已添加到数据库中。

现在我想从Android应用程序发出这些HTTP请求,我无法弄清楚为什么当我在我的设备上测试它时它不会工作。由于不推荐使用Apache HTTPClient,我首先尝试使用HttpURLConnection:

private void proceedSignup() {
    String domain = "http://10.0.2.2";
    String port = ":80";
    String urlString = domain + port + "/AppServer/register/doregister?login=android&firstName=vorn&secondName=nach";

    Log.d("DEBUG", "HTTP Request");
    HttpURLConnection urlConnection;
    try {
        URL url = new URL(urlString);
        urlConnection = (HttpURLConnection) url.openConnection();
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        String response = readStream(in);
        Log.d("DEBUG", response);
    } catch (Exception e ) {
        System.out.println(e.getMessage());
    }

    this.finish();
}

我还在清单文件中添加了这个必需的权限:

<uses-permission android:name="android.permission.INTERNET" />

响应字符串始终为null,但是如果成功则应返回JSON结构。 请求通过192.168.1.1或127.0.0.1到达服务器并不奇怪,但是,它应该使用别名10.0.0.2(参见here)。

我也尝试使用传统的Apache HTTPClient,尽管它不应该对我使用的库产生任何影响。然后我使用ngrok在80端口创建到我的localhost的隧道。也没有帮助。

这可能与服务器配置有关,如this帖子中所述?我的Tomcat服务器配置文件不包含任何特定的IP,但是......

2 个答案:

答案 0 :(得分:0)

我认为出现此问题的原因是Http Connection未与您的服务器成功建立。要成功设置本地服务器,您需要使用Intranet而不是Intranet。您需要在设备和本地服务器之间建立Intranet连接。这将帮助您并使用您的IP地址与本地服务器建立连接。

答案 1 :(得分:0)

在您的代码中,您有:

String domain = "http://10.0.2.2";

但在你的描述中你提到了

  

它应该使用别名10.0.0.2

你刚刚打错了IP吗?