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