自己的手机app里用到了百度地图sdk,希望根据手机获得的坐标来逆向到百度地图的坐标。
根据api文档拼写了url,因为是移动端,说是要添加mcode参数,然后我的url看起来如下:
http://api.map.baidu.com/geocoder/v2/?ak=xxxxxxx&mcode=sh1code;packname&callback=renderReverse&location=36.652181,116.870643&output=json&pois=0
先在浏览器里检查了,可以正常返回结果,然后自己写了个简单的httpURLConnection测试了下,在电脑上也是可以的。
然后把同样的 数据请求代码HttpUtil.sendHttpRequest(使用httpURLConnection进行连接) 和 URL(上面的) 迁移到安卓工程里,到模拟器和真机上测试 都失败!!!
返回的响应消息: .....mcode参数不存在 ,网上搜了半天,最不解的就是同样的url,我也完全正确的添加了mcode,目前的问题就是 电脑上j2se代码发送请求以及浏览器里直接敲url都正常,就是手机上不对。
也是纠结了半天,网上没搜到有意义的回答。
然后自己就想到手机端android和j2se的区别就是jdk了,不知道之前在哪看过有点印象的一句话就是“谷歌推荐在android里使用HttpClient”访问,之前习惯使用HttpURLConnection的方式请求web数据,
一直以为HttpURLConnection和HttpClient仅仅是用法上的不同,今天遇到的问题真是尴尬,提醒了自己一下,j2se和android sdk还是有差别的,尽量使用谷歌推荐的技术吧。
问题解决了,代码很简单:
String address = ... //上面文章提到的 //Android端使用HttpGet请求百度api数据,返回结果正常 public static String sendHttpGet(String address){ try { HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(address); HttpResponse res = client.execute(httpGet); if(res.getStatusLine().getStatusCode() == 200){ return EntityUtils.toString(res.getEntity(),"utf-8"); } return res.getStatusLine().getReasonPhrase(); } catch (Exception e) { e.printStackTrace(); return e.toString(); } }
时间: 2024-10-21 03:06:13