zoukankan      html  css  js  c++  java
  • 安卓调用百度地图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();
            }
        }
  • 相关阅读:
    C#图片存到资源文件,以及调用图片
    error C2039: “create”: 不是“cocos2d::GLView”的成员,出错解决办法
    error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800”
    vs2013激活码
    AppDelegate.h文件
    AppDelegate.cpp文件详解
    【最终版】Cocos2d-x&JS v3.7 发布!
    cocos2d-x 3.0 示例代码分析3:BaseTest
    vue li click
    me
  • 原文地址:https://www.cnblogs.com/everhad/p/4803888.html
Copyright © 2011-2022 走看看