Android——Retrofit踩坑記(一)

Android——Retrofit踩坑記

近期公司的項(xiàng)目Retrofit更新到了2.4,使用時(shí)無非是通過注解的方式對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行了包裝,剛開始寫的時(shí)候踩到一個(gè)哭笑不得的坑,記下來也方便大家,不要被這個(gè)小坑耽誤了時(shí)間...

問題

現(xiàn)需訪問一個(gè)接口,形式如:http://www.a.com/v1/search;
了解retrofit2.0及以上版本的同學(xué)都知道訪問的URL最基本的方法是通過baseUrl("")方法加注解中POST("...")里的內(nèi)容組合而成,即:

Retrofit retrofit = new Retrofit.Builder().baseUrl("http://www.a.com/").build();
//切記,baseUrl一定要以"/"結(jié)尾,否則會(huì)報(bào)錯(cuò)

加上:

public interface TestService {
    @POST("/v1/search")
    @FormUrlEncoded
    Call<ResponseBody> getCall(@FieldMap Map<String,String> params);
}

這樣,通過下面語句構(gòu)成的網(wǎng)絡(luò)請(qǐng)求的地址就為:http://www.a.com/v1/search,沒毛病

TestService testService = retrofit.create(TestService .class);

但是出于一些動(dòng)靜態(tài)情況可能你的Url你希望這樣寫:

Retrofit retrofit = new Retrofit.Builder().baseUrl("http://www.a.com/v1/").build();
public interface TestService {
    @POST("/search")
    @FormUrlEncoded
    Call<ResponseBody> getCall(@FieldMap Map<String,String> params);
}

看上去和第一種情況沒什么太大差別,只是把url中的"v1"放到baseUrl中而已,但是如果你這么寫了,服務(wù)器卻沒有返回你想要的數(shù)據(jù)給你,千萬不要大驚小怪,因?yàn)檫@樣寫之后,最后形成的url并不是"http://www.a.com/v1/search",而是"http://www.a.com/search"!

原因

作者一開始簡(jiǎn)直蒙蔽了,不相信自己的眼睛,查閱資料后才明確到,結(jié)點(diǎn)url(/search)的前面是一個(gè) / 符號(hào),這個(gè)將會(huì)只添加到baseUrl的host上面。也就是說當(dāng)我們?cè)诮Y(jié)點(diǎn)url上添加一個(gè)前置 / 符號(hào)時(shí),每個(gè)加到host Url后面的東西都會(huì)被省略掉,所以上面的"v1"就被省略掉了,所以正確的書寫方式應(yīng)該為:

public interface TestService {
    @POST("search")
    @FormUrlEncoded
    Call<ResponseBody> getCall(@FieldMap Map<String,String> params);
}

而當(dāng)你的baseUrl只包含host地址,如"http://www.a.com/",你的結(jié)點(diǎn)url前面加不加 / 都沒關(guān)系。
一個(gè)小小的"/",卻很可能耽誤你的時(shí)間,不去了解retrofit的這些細(xì)節(jié)還真不知道錯(cuò)在哪里。
這個(gè)小坑就分享到這,使用過程中大家還遇到什么問題,也歡迎在評(píng)論里留言討論~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容