我想通过 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();
}
我还在 list 文件中添加了这个必需的权限:
<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 端口创建到我的本地主机的隧道。也没有帮助。
这可能与服务器配置有关,如 this 中所述邮政?我的 Tomcat 服务器配置文件不包含任何特定的 IP,但是...
最佳答案
我认为这个问题的发生是因为 Http 连接没有与你的服务器成功建立。要成功设置本地服务器,您需要使用 Intranet 而不是 Intranet。您需要在您的设备和本地服务器之间建立内网连接。这将帮助您并使用您的 IP 地址与本地服务器建立连接。
关于java - 从 Android 设备到本地服务器的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592284/