【发布时间】: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