Retrofit關(guān)閉GET方法中的Query注解參數(shù)Url編碼

百度逆地理位置可以將我們從手機中獲取的大地坐標(biāo)系統(tǒng)中得到的gps坐標(biāo)轉(zhuǎn)為行政單位券盅,方便顯示給用戶杂靶。但是在使用retrofit來訪問的這個api的過程中出現(xiàn)了一段小波折。最開始我是通過下面的方法來構(gòu)造url的虱肄。

@GET("/v2/")
Observable<BaiduLocationBean> getBaiduLocation(@Query("location") String location,
                                                   @Query("output")String output,@Query("pois") String pois,
                                                   @Query("ak") String ak,@Query( "mcode") String mCode,
                                                   @Query("coordtype") String coordtype);

然后在手機中訪問谜叹,在日志中觀察實際上訪問的是下面的這個鏈接。其實不能正確訪問括堤,因為涉及到公司若干信息碌秸,所以url中的參數(shù)有刪減。

http://api.map.baidu.com/geocoder/v2/悄窃?location=39.910113,116.502766&output=json&pois=0&ak=bu2lzAsplxBycu0Rz92nryd8I&mcode=1E%3A1E%3ABA%3AF3%3A36%3A71%3AAC%3AE5%3AA9%3A37%3ADE%3A88%3A84%3A52%3A97%3A8C%3AE8%3Bcom.dzy&coordtype=wgs84ll

上面的這個經(jīng)過url編碼之后的鏈接讥电,百度逆地理api似乎不認識,于是就返回來下面的結(jié)果轧抗。

{
    "status": 200,
    "message": "APP不存在恩敌,AK有誤請檢查再重試"
}

于是我就想,難道android訪問的時候横媚,是都會將一些特殊符號轉(zhuǎn)為url編碼嗎纠炮?上面鏈接中的%3A實際上是":"冒號。那怎么才能防止冒號被轉(zhuǎn)為%3A呢灯蝴?于是我就測試了一下HttpUrlConnection來訪問這個接口

String baseUrl="http://api.map.baidu.com/geocoder/v2/?location="+latitude+","+longitude+
                "&output=json&pois=0&ak=bu2lzAsplxBycu0Rz92nryd8I&" +
                "mcode=1E:1E:BA:F3:36:71:AC:E5:A9:37:DE:88:84:52:97:8C:E8;com.dzy&" +
                "coordtype=wgs84ll";
        try {
            URL url=new URL(baseUrl);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setConnectTimeout(5000);
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();
            if(urlConnection.getResponseCode()>=200&&urlConnection.getResponseCode()<=300) {

                InputStream stream = urlConnection.getInputStream();
                byte[] buffer = new byte[2048];
                int readBytes = 0;
                StringBuilder stringBuilder = new StringBuilder();

                while ((readBytes = stream.read(buffer)) != -1) {
                    stringBuilder.append(new String(buffer, 0, readBytes));
                }
                Log.e("baidu", stringBuilder.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

上面的訪問就沒有任何問題恢口,于是我就想,既然默認的get訪問api不會經(jīng)過url編碼穷躁,那么retrofit卻自動url編碼了耕肩,那么應(yīng)該就會提供關(guān)閉url編碼參數(shù)的開關(guān)。于是看了官方文檔:

Parameter names and values are URL encoded by default. Specify encoded=true
to change this behavior.
@GET("/friends") Call<ResponseBody> friends(@Query(value="group", encoded=true) String group);

但是發(fā)現(xiàn)置為true问潭,并不好用猿诸,于是encoded=false。然后解決問題狡忙。

@GET("/v2/")
Observable<BaiduLocationBean> getBaiduLocation(@Query(value = "location",encodeValue = false) String location,
                                                   @Query("output")String output,@Query("pois") String pois,
                                                   @Query("ak") String ak,@Query(value = "mcode",encodeValue = false) String mCode,
                                                   @Query("coordtype") String coordtype);
http://api.map.baidu.com/geocoder/v2/?location=39.910149,116.502832&output=json&pois=0&ak=bu2lzAsplxBycu0Rz92nryd8I&mcode=1E:1E:BA:F3:36:71:AC:E5:A9:37:DE:88:84:52:97:8C:E8;com.dzy&coordtype=wgs84ll
{
    status: 0,
    result: {
        location: {
            lng: 116.51536122516896,
            lat: 39.917671134759644
        },
        formatted_address: "北京市朝陽區(qū)",
        business: "四惠,十里堡,甘露園",
        addressComponent: {
            country: "中國",
            country_code: 0,
            province: "北京市",
            city: "北京市",
            district: "朝陽區(qū)",
            adcode: "110105",
            street: "",
            street_number: "",
            direction: "",
            distance: ""
        },
        pois: [
            
        ],
        roads: [
            
        ],
        poiRegions: [
            
        ],
        sematic_description: "中瑞匯通大廈內(nèi)0米",
        cityCode: 131
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梳虽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子去枷,更是在濱河造成了極大的恐慌怖辆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件删顶,死亡現(xiàn)場離奇詭異,居然都是意外死亡淑廊,警方通過查閱死者的電腦和手機逗余,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來季惩,“玉大人录粱,你說我怎么就攤上這事腻格。” “怎么了啥繁?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵菜职,是天一觀的道長。 經(jīng)常有香客問我旗闽,道長酬核,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任适室,我火速辦了婚禮嫡意,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捣辆。我一直安慰自己蔬螟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布汽畴。 她就那樣靜靜地躺著旧巾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忍些。 梳的紋絲不亂的頭發(fā)上鲁猩,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音坐昙,去河邊找鬼绳匀。 笑死,一個胖子當(dāng)著我的面吹牛炸客,可吹牛的內(nèi)容都是我干的疾棵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痹仙,長吁一口氣:“原來是場噩夢啊……” “哼是尔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起开仰,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拟枚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后众弓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恩溅,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年谓娃,在試婚紗的時候發(fā)現(xiàn)自己被綠了脚乡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡滨达,死狀恐怖奶稠,靈堂內(nèi)的尸體忽然破棺而出俯艰,到底是詐尸還是另有隱情,我是刑警寧澤锌订,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布竹握,位于F島的核電站,受9級特大地震影響辆飘,放射性物質(zhì)發(fā)生泄漏啦辐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一劈猪、第九天 我趴在偏房一處隱蔽的房頂上張望昧甘。 院中可真熱鬧,春花似錦战得、人聲如沸充边。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浇冰。三九已至,卻和暖如春聋亡,著一層夾襖步出監(jiān)牢的瞬間肘习,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工坡倔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漂佩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓罪塔,卻偏偏與公主長得像投蝉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子征堪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容