Retrofit學(xué)習(xí)(二)-get請(qǐng)求

Retrofit學(xué)習(xí)(二)-get請(qǐng)求

環(huán)境屉来、簡(jiǎn)單封裝

Retrofit學(xué)習(xí)(一)-集成
http://www.reibang.com/p/86e5cddcc753
Retrofit學(xué)習(xí)(二)-get請(qǐng)求
http://www.reibang.com/p/cdde02a0777c
Retrofit學(xué)習(xí)(三)-普通post請(qǐng)求
http://www.reibang.com/p/7f252d10fd41
Retrofit學(xué)習(xí)(四)-下載文件
http://www.reibang.com/p/f61645a770ae
Retrofit學(xué)習(xí)(五)-文件上傳
http://www.reibang.com/p/ca0cb8640c8f

建立接口


    /**
     * 方法不要加返回值之類的void String寝并。战坤。CAll<String>代表返回值
     * @return
     */
    @GET("rank")
    Call<String> getRank(@Query("key") String key ,@Query("area") String area);

建立請(qǐng)求

 String baseUrl = "http://v.juhe.cn/boxoffice/";

        String appKey = "a915893513986a67fdac70235db2c0af";

        Retrofit retrofit = new Retrofit.Builder()
                 .baseUrl(baseUrl)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        DayService dayService = retrofit.create(DayService.class);

        Call<String> call = dayService.getRank(appKey,"CN");

        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {

                L.d("vivi",response.message()+ "    "+ response.body());
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

                t.printStackTrace();
            }
        });

結(jié)果:

vivi: OK    {"resultcode":"200","reason":"success","result":[{"rid":"1","name":"湄公河行動(dòng)","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"53200","tboxoffice":"53200"},{"rid":"2","name":"從你的全世界路過","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"46800","tboxoffice":"46800"},{"rid":"3","name":"爵跡","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"27500","tboxoffice":"27500"},{"rid":"4","name":"王牌逗王牌","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"18900","tboxoffice":"18900"},{"rid":"5","name":"魯濱遜漂流記","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"3800","tboxoffice":"3800"},{"rid":"6","name":"逗鳥外傳:萌寶滿天飛","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"3050","tboxoffice":"3050"},{"rid":"7","name":"鎧甲勇士捕王","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"1745","tboxoffice":"1745"},{"rid":"8","name":"我是哪吒","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"927","tboxoffice":"927"},{"rid":"9","name":"七月與安生","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"359","tboxoffice":"16689"},{"rid":"10","name":"瘋狂丑小鴨","wk":"2016.10.1- 2016.10.7(單位:萬元)","wboxoffice":"318","tboxoffice":"318"}],"error_code":0}

這里看到
@Query表示一個(gè)參數(shù)key,String 表示要傳進(jìn)來的值
@Query("key") String key ,@Query("area") String area

String 的名字可以和@Query中的不一樣盟榴,建立保持一致抹锄,
@Query表示是鍵

將數(shù)據(jù)轉(zhuǎn)換為BEAN稿存,一樣寫法只是返回值變?yōu)閷?shí)體類

public class RankBean {

    public String resultcode;
    public String reason;
    public int    error_code;
  

    public List<ResultEntity> result;

    public static class ResultEntity {
        public String rid;
        public String name;
        public String wk;
        public String wboxoffice;
        public String tboxoffice;
    }
}

    /**
     * 方法不要加返回值之類的void String栅贴。偎球。CAll<String>代表返回值
     * @return
     */
    @GET("rank")
    Call<RankBean> getRank(@Query("key") String key , @Query("area") String area);

參數(shù)過多時(shí)使用@QueryMap

 /**
     * 使用@QueryMap
     * @param params
     * @return
     */
    @GET("rank")
    Call<RankBean> getRank2(@QueryMap Map<String,String> params);

 /**
     * 使用QueryMap傳參數(shù)
     */
    private void getQueryMap() {
        String baseUrl = "http://v.juhe.cn/boxoffice/";
        String appKey = "a915893513986a67fdac70235db2c0af";

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        DayService dayService = retrofit.create(DayService.class);

        /**
         * 傳入多個(gè)參數(shù)洒扎,自己寫key-value
         */
        Map<String,String> params = new HashMap<>();

        params.put("key",appKey);
        params.put("area","HK");
        Call<RankBean> rank2Call = dayService.getRank2(params);

        rank2Call.enqueue(new Callback<RankBean>() {
            @Override
            public void onResponse(Call<RankBean> call, Response<RankBean> response) {
                Toast.makeText(FirstActivity.this, "response  \n"+response.body().toString(), Toast.LENGTH_SHORT).show();
                L.d("vivi",response.message()+ "    "+ response.body().toString());
                mTvResult.setText(response.body().toString());
            }

            @Override
            public void onFailure(Call<RankBean> call, Throwable t) {
                t.printStackTrace();
            }
        });

    }

URL注意事件

圖片來源:
https://inthecheesefactory.com/blog/retrofit-2.0/en

apiservice1.png
apiservice1.png

apiservice2.png
apiservice2.png

apiservice3.png
apiservice3.png

Base URL: 在最后加下 /

@Url(@GET,@POST): 不要在開始位置加 /

配制HEADER

用 @Headers 設(shè)置Http請(qǐng)求的header

@Headers("Cache-Control: max-age=640000")
@GET("/widget/list")
void widgetList(Call<List<Widget>> call);
@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("/users/{username}")
void getUser(@Path("username") String username, Call<User>);

Call<User>寫前面也行,寫這里也行

Http請(qǐng)求頭不會(huì)互相覆蓋衰絮,如果存在多個(gè)請(qǐng)求頭的名字相同袍冷,那么它們?nèi)慷紩?huì)被包含在Http請(qǐng)求中。

動(dòng)態(tài)更新HEADER

在請(qǐng)求方法的參數(shù)中猫牡,用 @Header 動(dòng)態(tài)更新Http請(qǐng)求頭

@GET("/user")
  void getUser(@Header("Authorization") String authorization)

參數(shù)不能為null胡诗,否則這個(gè)header將會(huì)被刪掉。
@Headers可以用來判斷用戶是否有權(quán)限訪問某些資源,如:訪問用戶的個(gè)人信息,只有登錄了煌恢,才能帶著自己的ID骇陈,tokey之類的去取個(gè)人信息

源碼:
https://github.com/ln0491/RetrofitDemo2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瑰抵,隨后出現(xiàn)的幾起案子缩歪,更是在濱河造成了極大的恐慌,老刑警劉巖谍憔,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異主籍,居然都是意外死亡习贫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門千元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苫昌,“玉大人,你說我怎么就攤上這事幸海∷钌恚” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵物独,是天一觀的道長袜硫。 經(jīng)常有香客問我,道長挡篓,這世上最難降的妖魔是什么婉陷? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮官研,結(jié)果婚禮上秽澳,老公的妹妹穿的比我還像新娘。我一直安慰自己戏羽,他們只是感情好担神,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著始花,像睡著了一般妄讯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衙荐,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天捞挥,我揣著相機(jī)與錄音,去河邊找鬼忧吟。 笑死砌函,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讹俊,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼垦沉,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了仍劈?” 一聲冷哼從身側(cè)響起厕倍,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贩疙,沒想到半個(gè)月后讹弯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡这溅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年组民,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悲靴。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡臭胜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出癞尚,到底是詐尸還是另有隱情耸三,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布浇揩,位于F島的核電站仪壮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胳徽。R本人自食惡果不足惜睛驳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膜廊。 院中可真熱鬧乏沸,春花似錦、人聲如沸爪瓜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铆铆。三九已至蝶缀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間薄货,已是汗流浹背翁都。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谅猾,地道東北人柄慰。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓鳍悠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坐搔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子藏研,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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