FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
HttpGet get = new HttpGet(path);
HttpResponse httpResponse = httpclient.execute(get);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
String result = EntityUtils.toString(httpResponse.getEntity());
return result;
}
return null;
}
});
new Thread(task).start();
return task.get();
我觉得你应该先检查返回的code是什么啊,里面就一个判断,你说网页上访问返回的json正常,但是你的不行,我觉得很大可能就是那里的问题,是不是返回值不是200的。。。
一步步调试,我之前做接口的时候也出现过这种问题,
第一步,看下请求的url,看下其数据类型,长度,是否与直接在浏览器中打开的一致。
第二步,构造http请求,查看返回http状态码。服务端日志记录看是否有访问,
第三步,,检查服务端返回的数据,页面content-type:是否为json,文件是否为utf-8无BOM类型
以前我有个同事也遇到过这种情况。。检查了很久很久,最后发现 statuscode 是 201。。。
可以朝这个思路想想
尝试放宽getStatusCode()
的判断条件呢? 比如
if (response.getStatusLine().getStatusCode() > HttpStatus.SC_BAD_REQUEST) {
// Error
} else {
// success, 处理数据
}
Update
HttpGet
和HttpPost
的区别在于前者是将参数在地址中传递,后者是将参数用List传递。而并没有在你的代码里看到httpPost.setEntity()
去设置参数。这样看来你的HttpPost和HttpGet应该没差才对,所以仍不清楚为什么换成post就可以了。
另外你在网页上输入URL地址是什么?确定和传给HttpGet的一致吗?
404了,你就检查你的链接有没有错误,有没有网络权限,有没有连上网络,反正就是这些小问题。普通的Get请求,应该没什么别的原因。
Good luck.