Day22-Retrofit

tips

Retrofit使用From

1. 添加依賴和網(wǎng)絡(luò)權(quán)限

build.gradle

dependencies {
    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    // Retrofit庫
  }

Manifest

<uses-permission android:name="android.permission.INTERNET"/>

2. 創(chuàng)建接受服務(wù)器返回的數(shù)據(jù)的類

public class Translation {
        private int status;

    private content content;
    private static class content {
        private String from;
        private String to;
        private String vendor;
        private String out;
        private int errNo;
    }

    //定義 輸出返回數(shù)據(jù) 的方法
    public void show() {
        System.out.println(status);

        System.out.println(content.from);
        System.out.println(content.to);
        System.out.println(content.vendor);
        System.out.println(content.out);
        System.out.println(content.errNo);
    }
}

3. 創(chuàng)建用于描述網(wǎng)絡(luò)請求的接口

public interface GetRequest_Interface {

 @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
    Call<Translation> getCall();
    // 注解里傳入 網(wǎng)絡(luò)請求 的部分URL地址
    // Retrofit把網(wǎng)絡(luò)請求的URL分成了兩部分:一部分放在Retrofit對象里布朦,另一部分放在網(wǎng)絡(luò)請求接口里
    // 如果接口里的url是一個完整的網(wǎng)址,那么放在Retrofit對象里的URL可以忽略
    // getCall()是接受網(wǎng)絡(luò)請求數(shù)據(jù)的方法
}

3.1 接口拆分

4. 創(chuàng)建 Retrofit 對象

4.1 數(shù)據(jù)解析器(Converter)

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://fy.iciba.com/") // 設(shè)置 網(wǎng)絡(luò)請求 Url
        .addConverterFactory(GsonConverterFactory.create()) //設(shè)置使用Gson解析(記得加入依賴)
        .build();

數(shù)據(jù)解析器 Gradle依賴
Gson com.squareup.retrofit2:converter-gson:2.0.2
Jackson com.squareup.retrofit2:converter-jackson:2.0.2
Simple XML com.squareup.retrofit2:converter-simplexml:2.0.2
Protobuf com.squareup.retrofit2:converter-protobuf:2.0.2
Moshi com.squareup.retrofit2:converter-moshi:2.0.2
Wire com.squareup.retrofit2:converter-wire:2.0.2
Scalars com.squareup.retrofit2:converter-scalars:2.0.2

4.2 網(wǎng)絡(luò)請求適配器(CallAdapter)

網(wǎng)絡(luò)請求適配器 Gradle依賴
guava com.squareup.retrofit2:adapter-guava:2.0.2
Java8 com.squareup.retrofit2:adapter-java8:2.0.2
rxjava com.squareup.retrofit2:adapter-rxjava:2.0.2

5. 創(chuàng)建 網(wǎng)絡(luò)請求接口實例

6. 發(fā)送網(wǎng)絡(luò)請求(異步 / 同步)

7. 處理返回的數(shù)據(jù)

public class GetRequest extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        request();
        // 使用Retrofit封裝的方法
    }
    public void request() {

        //步驟4:創(chuàng)建Retrofit對象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fy.iciba.com/") // 設(shè)置 網(wǎng)絡(luò)請求 Url
                .addConverterFactory(GsonConverterFactory.create()) //設(shè)置使用Gson解析(記得加入依賴)
                .build();

        // 步驟5:創(chuàng)建 網(wǎng)絡(luò)請求接口 的實例
        GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);

        //對 發(fā)送請求 進(jìn)行封裝
        Call<Translation> call = request.getCall();

        //步驟6:發(fā)送網(wǎng)絡(luò)請求(異步)
        call.enqueue(new Callback<Translation>() {
            //請求成功時回調(diào)
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                // 步驟7:處理返回的數(shù)據(jù)結(jié)果
                response.body().show();
            }

            //請求失敗時回調(diào)
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                System.out.println("連接失敗");
            }
        });
    }
}

6.2 同步請求(記得不在主線程請求)

Response<Translation> response = call.execute();
        response.body().show();

加上gson解析需要的依賴 compile 'com.squareup.retrofit2:converter-gson:2.0.2'

Retrofit進(jìn)階

okhttp3

HttpLoggingInterceptor攔截日志

原本retrofit 的 set log level已經(jīng)刪除, 通過okhttp攔截

retryOnConnectionFailure(true) 設(shè)置出現(xiàn)錯誤進(jìn)行重新連接

connectTimeout(15, TimeUnit.SECONDS) 設(shè)置超時時間

addNetworkInterceptor, 讓所有的網(wǎng)絡(luò)請求都加上攔截器,

參考
drakeet | Retrofit 2.0 + OkHttp 3.0 配置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子早龟,更是在濱河造成了極大的恐慌,老刑警劉巖目代,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靴迫,死亡現(xiàn)場離奇詭異,居然都是意外死亡盐碱,警方通過查閱死者的電腦和手機(jī)把兔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門沪伙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人县好,你說我怎么就攤上這事围橡。” “怎么了缕贡?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵翁授,是天一觀的道長。 經(jīng)常有香客問我晾咪,道長收擦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任谍倦,我火速辦了婚禮塞赂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昼蛀。我一直安慰自己宴猾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布叼旋。 她就那樣靜靜地躺著仇哆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夫植。 梳的紋絲不亂的頭發(fā)上税产,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音偷崩,去河邊找鬼辟拷。 笑死,一個胖子當(dāng)著我的面吹牛阐斜,可吹牛的內(nèi)容都是我干的衫冻。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼谒出,長吁一口氣:“原來是場噩夢啊……” “哼隅俘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起笤喳,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤为居,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杀狡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒙畴,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膳凝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碑隆。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蹬音,靈堂內(nèi)的尸體忽然破棺而出上煤,到底是詐尸還是另有隱情,我是刑警寧澤著淆,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布劫狠,位于F島的核電站,受9級特大地震影響永部,放射性物質(zhì)發(fā)生泄漏嘉熊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一扬舒、第九天 我趴在偏房一處隱蔽的房頂上張望阐肤。 院中可真熱鬧,春花似錦讲坎、人聲如沸孕惜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衫画。三九已至,卻和暖如春瓮栗,著一層夾襖步出監(jiān)牢的瞬間削罩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工费奸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留弥激,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓愿阐,卻偏偏與公主長得像微服,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子缨历,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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