0

我正在尝试HttpClient在 Android 上运行 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 权限。

有什么想法我能做些什么来解决它?

4

1 回答 1

2

好的,所以在@Olaf Kock 的 gr8 帮助下,我在这里找到了解决方案。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 地址(点击此链接获取您的 IP 地址)。把这个地址像这样:http://ip_address:80808080是您的 localhost Web 服务器的端口(tomcat 默认端口)。

于 2013-10-23T18:50:06.803 回答