文章出處

自己的手機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();
        }
    }

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()