我正在尝试在 Android 上使用 HttpClient
运行 HTTP 请求。
这是我在 Android 端的代码:
httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 15000);
// Create a new HttpClient and Post Header
httpClient = new DefaultHttpClient(httpParams);
getRequest = new HttpGet(Dictionary.MINYAN_SERVER + servlet);
getRequest.addHeader(ACCEPT, APP_JSON);
HttpResponse response = httpClient.execute(getRequest); //STUCKED HERE
如果我删除超时设置,我将永远不会收到回复。随着超时,我收到超时异常。
在服务器端,我在本地主机上运行了一个简单的 servlet。这是代码:
public class Test extends HttpServlet
{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("adasdasd asdsadsad");
JSONObject obj = new JSONObject();
try
{
obj.put("name", "vlad");
}
catch (JSONException e)
{
e.printStackTrace();
}
response.setContentType("application/json");
response.getWriter().write(obj.toString());
}
}
注意:
当尝试从浏览器访问 loclhost:8080/Test
时,我得到:{"name":"vlad"}
没问题。
Dictionary.MINYAN_SERVER
包含 http://10.0.2.2:8080/
和 servet
包含 Test
。
我的 Manifest.xml 文件中有 Internet 权限。
有什么办法可以解决吗?
最佳答案
好的,在@Olaf Kock 的 gr8 帮助下,我找到了解决方案 here .
Genymotion 在 Virtualbox 上运行,默认网络配置为“Host-Only”。此方法实质上模拟了由您的 Genymotion VM(模拟器)和您的主机共享的物理网络。网络的名称是 vboxnet0,如果您在主机上运行“ifconfig vboxnet0”(如果运行 Windows,则运行“ipconfig vboxnet0”),您应该在 vboxnet0 网络上收到主机的 IP 地址。默认 IP 很可能是 192.168.56.1
。这是从 Genymotion 模拟器访问主机时使用的 IP 地址。
对我有用的 url 是:
http://192.168.56.1:8080/
更新:
您可以找到您的 IP 地址 ( follow this link to get your IP address )。像这样放置此地址:http://ip_address:8080
。 8080
是您的本地 Web 服务器的端口(tomcat 默认端口)。
关于java - HttpClient 使用 Genymotion 模拟器卡在 Android 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19527448/