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();
            }
        }
  • 相关阅读:
    TWebBrowser 与 MSHTML(3): window 对象的属性、方法、事件纵览
    使 SaveDialog 对话框的文件名选择变灰 回复 "delphan" 的问题
    [最新通知]今日17:0019:00将不能访问博客园
    编辑器改进(三)
    博客园.Text技术支持移至PSP技术支持中心
    [公告]关于投稿到Dearbook的“读书笔记”专栏
    [致歉]博客园服务器停运时间超出计划时间
    [博客园公告]给发表评论增加了验证码功能
    CS Beta 1发布了
    [通知]11月6日(星期六)可能不能访问博客园
  • 原文地址:https://www.cnblogs.com/everhad/p/4803888.html
Copyright © 2011-2022 走看看