安卓调用百度地图api 错误 mcode参数不存在

自己的手机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。问题就是 电脑上HttpURLConnection代码发送请求以及浏览器里直接敲url都正常,就是手机上不对。

 

也是纠结了半天,网上没搜到有意义的回答。

 

最后想起HttpURLConnection和HttpClient有不同的,既然用HttpURLConnection出问题了,换HttpClient试试看,结果就正常可以访问了。

 

网上有很多关于HttpURLConnection和HttpClient的比较讨论,原来google在安卓2.2之前都是主推HttpClient的,之后就主推HttpURLConnection了。

上面mcode通过手机端访问时url参数丢失?的原因没来得及去分析,可以结合两种api的特性以及fiddler 手机抓包来看看。

 

问题解决了,代码很简单:

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();
        }
    }

 

posted @ 2015-09-12 23:39  everhad  阅读(3793)  评论(0编辑  收藏  举报