【发布时间】:2016-01-04 13:28:53
【问题描述】:
我想通过 HTTP 请求从 Android 应用程序提供 RESTful 服务。为了开发,我在 eclipse 中设置了一个 Tomcat 服务器和一个 SQLite 数据库。从一个简单的 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" />
响应字符串始终为空,但在成功的情况下应返回 JSON 结构。 请求不会通过 192.168.1.1 或 127.0.0.1 到达服务器并不奇怪,但是,它应该使用别名 10.0.0.2(请参阅here)。
我也尝试使用旧的 Apache HTTPClient,尽管它不应该对我使用哪个库有任何影响。然后我使用ngrok 在端口 80 处创建到我的本地主机的隧道。也没有帮助。
这可能与服务器配置有关,如this 帖子中所述?我的 Tomcat 服务器配置文件不包含任何特定的 IP,但是...
【问题讨论】:
-
"当我在我的设备上测试它时" -- 你是在设备上测试吗?您链接到的文档适用于模拟器。模拟器不是设备。
-
你用的是模拟器还是手机?
-
是的,我正在用 USB 调试在我的手机上进行测试。不幸的是,我无法让 Android 模拟器在我的计算机上运行。直到现在我才意识到链接的概览表只适用于模拟器。
-
如果您使用模拟器,它适用于 10.0.2.2 ip!
标签: java android rest http tomcat