安卓調用百度地圖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();
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM