• 安卓调用百度地图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();
            }
        }
  • 相关阅读:
    web版ssh的使用
    Django高级篇三。restful的解析器,认证组件,权限组件
    Django中的缓存(内存,文件,redis)
    Python使用redis
    跨域请求
    python发送邮箱
    登录服务器失败 IP 统计和处理方法
    centos中单进程监控
    编译搭建lnmp+zabbix
    Django+Uwsgi+Nginx项目部署文档
  • 原文地址:https://www.cnblogs.com/everhad/p/4803888.html
Copyright © 2020-2023  润新知