【问题标题】:HttpClient stuck on Android with Genymotion emulatorHttpClient 使用 Genymotion 模拟器卡在 Android 上
【发布时间】:2013-10-31 21:19:53
【问题描述】:

我正在尝试在 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 权限。

有什么想法可以解决吗?

【问题讨论】:

  • 如果你使用URLConnection会发生同样的事情吗?
  • 只是Java默认的http客户端。在此处或在 google 上搜索并尝试一下。您很可能会得到相同的结果,但我很好奇。
  • 这与我的模拟器运行在 Genymotion 上有关吗?
  • URLConnection 试过了,还是一样。
  • 本地主机和 10.0.2.2 之间存在很大差异 - 例如防火墙、路由(甚至只是本地)。检查您是否可以通过任何其他方式从模拟器到达 10.0.2.2 上的端点,例如浏览器

标签: java android tomcat servlets xmlhttprequest


【解决方案1】:

好的,在@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 地址。

对我有用的网址是:

http://192.168.56.1:8080/

更新:

您可以找到您的 IP 地址 (follow this link to get your IP address)。把这个地址写成这样:http://ip_address:80808080 是您的 localhost Web 服务器的端口(tomcat 默认端口)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 2016-11-04
    • 2023-03-22
    • 2015-07-25
    • 2017-06-23
    • 2017-08-22
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多