成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

[原創(chuàng)]Retrofit使用教程(一)

codeGoogle / 3013人閱讀

摘要:公司開(kāi)源了許多優(yōu)秀的庫(kù),就是其中之一。是用來(lái)簡(jiǎn)化訪問(wèn)服務(wù)器,如果你的服務(wù)器使用的使,那么趕緊使用吧。官方的文檔是用的說(shuō)明使用過(guò)程的,有的童鞋可能從沒(méi)用過(guò)的比如我,為了簡(jiǎn)單易懂,這里我使用一個(gè)查詢手機(jī)歸屬地的來(lái)說(shuō)明的使用過(guò)程。

Square公司開(kāi)源了許多優(yōu)秀的庫(kù),Retrofit就是其中之一。

Retrofit是用來(lái)簡(jiǎn)化APP訪問(wèn)服務(wù)器API,如果你的服務(wù)器使用的使RESTAPI,那么趕緊使用Retrofit吧。

官方的文檔是用GitHub的API說(shuō)明使用過(guò)程的,有的童鞋可能從沒(méi)用過(guò)GitHub的API(比如我),為了簡(jiǎn)單易懂,這里我使用一個(gè)查詢手機(jī)歸屬地的API來(lái)說(shuō)明Retrofit的使用過(guò)程。

集成

目前我使用的是AndroidStudio,那么在model的build.gradle文件中添加以下引用:

    compile "com.squareup.okhttp3:okhttp:3.2.0"
    compile "com.squareup.retrofit2:retrofit:2.0.0-beta4"
    compile "com.google.code.gson:gson:2.6.2"
    compile "com.jakewharton:butterknife:7.0.1"

說(shuō)明:

Retrofit依賴(lài)于okhttp,所以需要集成okhttp

API返回的數(shù)據(jù)為JSON格式,在此我使用的是Gson對(duì)返回?cái)?shù)據(jù)解析.請(qǐng)使用最新版的Gson

butterknife是用來(lái)View綁定的,可以不用寫(xiě)那些煩人的findViewById

返回的數(shù)據(jù)格式

使用的是百度的API Store提供的API,地址在此:手機(jī)號(hào)碼歸屬地__API服務(wù)_API服務(wù)_API Store.

該接口的API主機(jī)地址為:http://apis.baidu.com,資源地址為:/apistore/mobilenumber/mobilenumber
需要一個(gè)key等于apikey的Header和一個(gè)key等于phone的查詢關(guān)鍵字,而且該請(qǐng)求為GET請(qǐng)求.

所以我們需要構(gòu)造一個(gè)GET請(qǐng)求,添加一個(gè)Header,添加一個(gè)Query關(guān)鍵字,訪問(wèn)該API返回的數(shù)據(jù)格式如下:

{
    "errNum": 0,
    "retMsg": "success",
    "retData": {
        "phone": "15210011578",
        "prefix": "1521001",
        "supplier": "移動(dòng)",
        "province": "北京",
        "city": "北京",
        "suit": "152卡"
    }
}

根據(jù)返回結(jié)果我們創(chuàng)建數(shù)據(jù)對(duì)象PhoneResult,如下:

public class PhoneResult {
    /**
     * errNum : 0
     * retMsg : success
     * retData : {"phone":"15210011578","prefix":"1521001","supplier":"移動(dòng)","province":"北京","city":"北京","suit":"152卡"}
     */
    private int errNum;
    private String retMsg;
    /**
     * phone : 15210011578
     * prefix : 1521001
     * supplier : 移動(dòng)
     * province : 北京
     * city : 北京
     * suit : 152卡
     */
    private RetDataEntity retData;

    public void setErrNum(int errNum) {
        this.errNum = errNum;
    }

    public void setRetMsg(String retMsg) {
        this.retMsg = retMsg;
    }

    public void setRetData(RetDataEntity retData) {
        this.retData = retData;
    }

    public int getErrNum() {
        return errNum;
    }

    public String getRetMsg() {
        return retMsg;
    }

    public RetDataEntity getRetData() {
        return retData;
    }

    public static class RetDataEntity {
        private String phone;
        private String prefix;
        private String supplier;
        private String province;
        private String city;
        private String suit;

        public void setPhone(String phone) {
            this.phone = phone;
        }

        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }

        public void setSupplier(String supplier) {
            this.supplier = supplier;
        }

        public void setProvince(String province) {
            this.province = province;
        }

        public void setCity(String city) {
            this.city = city;
        }

        public void setSuit(String suit) {
            this.suit = suit;
        }

        public String getPhone() {
            return phone;
        }

        public String getPrefix() {
            return prefix;
        }

        public String getSupplier() {
            return supplier;
        }

        public String getProvince() {
            return province;
        }

        public String getCity() {
            return city;
        }

        public String getSuit() {
            return suit;
        }
    }
}

注:AndroidStudio有個(gè)插件 GsonFormat可以很方便地將Json數(shù)據(jù)轉(zhuǎn)為Java對(duì)象.

實(shí)現(xiàn)過(guò)程 構(gòu)建

首先,按照官方的說(shuō)明,我們需要?jiǎng)?chuàng)建一個(gè)接口,返回Call

官方范例:

public interface GitHubService {
  @GET("users/{user}/repos")
  Call> listRepos(@Path("user") String user);
}

這里我們創(chuàng)建一個(gè)名為PhoneService的接口,返回值為Call,如下:

public interface PhoneService {
    @GET("")
    Call getResult();
}

首先我們需要填寫(xiě)API的相對(duì)地址:/apistore/mobilenumber/mobilenumber

public interface PhoneService {
    @GET("/apistore/mobilenumber/mobilenumber")
    Call getResult(@Header("apikey") String apikey, @Query("phone") String phone);
}

接著我們要添加一個(gè)Header和一個(gè)Query關(guān)鍵字,在這里我們需要使用Retrofit提供的注解:

@Header用來(lái)添加Header

@Query用來(lái)添加查詢關(guān)鍵字

那么,我們的接口就如下了:

public interface PhoneService {
    @GET("/apistore/mobilenumber/mobilenumber")
    Call getResult(@Header("apikey") String apikey, @Query("phone") String phone);
}
使用

構(gòu)建好接口以后,可以使用了!

使用分為四步:

創(chuàng)建Retrofit對(duì)象

創(chuàng)建訪問(wèn)API的請(qǐng)求

發(fā)送請(qǐng)求

處理結(jié)果

代碼如下所示:

private static final String BASE_URL = "http://apis.baidu.com";
private static final String API_KEY = "8e13586b86e4b7f3758ba3bd6c9c9135";

private void query(){
    //1.創(chuàng)建Retrofit對(duì)象
    Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())//解析方法
            .baseUrl(BASE_URL)//主機(jī)地址
            .build();
            
    //2.創(chuàng)建訪問(wèn)API的請(qǐng)求
    PhoneService service = retrofit.create(PhoneService.class);
    Call call = service.getResult(API_KEY, phoneView.getText().toString());
    
    //3.發(fā)送請(qǐng)求
    call.enqueue(new Callback() {
        @Override
        public void onResponse(Call call, Response response) {
            //4.處理結(jié)果
            if (response.isSuccess()){
                PhoneResult result = response.body();
                if (result != null){
                    PhoneResult.RetDataEntity entity = result.getRetData();
                }
            }
        }

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

        }
    });
}

可能會(huì)有疑問(wèn):第一步中的解析方法GsonConverterFactory.create()是個(gè)啥?

官方文檔也說(shuō)明了,這是用來(lái)轉(zhuǎn)換服務(wù)器數(shù)據(jù)到對(duì)象使用的.該Demo中使用API返回的數(shù)據(jù)是JSON格式,故此使用Gson來(lái)轉(zhuǎn)換,如果服務(wù)器返回的是其他類(lèi)型的數(shù)據(jù),則根據(jù)需要編寫(xiě)對(duì)應(yīng)的解析方法.

驗(yàn)證

好了,現(xiàn)在可以驗(yàn)證一下了!

編譯APP,安裝到手機(jī),界面如下:

輸入手機(jī)號(hào)碼,然后點(diǎn)擊查詢按鈕,結(jié)果如下:

項(xiàng)目代碼詳見(jiàn)此處:Dev-Wiki/RetrofitDemo

更多文章請(qǐng)?jiān)L問(wèn)我的博客:DevWiki Blog

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65570.html

相關(guān)文章

  • [原創(chuàng)]Retrofit使用教程(二)

    摘要:上一篇文章講述了的簡(jiǎn)單使用這次我們學(xué)習(xí)一下的各種請(qǐng)求基礎(chǔ)在中使用注解的方式來(lái)區(qū)分請(qǐng)求類(lèi)型比如表示一個(gè)請(qǐng)求括號(hào)中的內(nèi)容為請(qǐng)求的地址格式含義表示這是一個(gè)請(qǐng)求表示這個(gè)一個(gè)請(qǐng)求表示這是一個(gè)請(qǐng)求表示這是一個(gè)請(qǐng)求表示這是一個(gè)請(qǐng)求表示這是一個(gè)請(qǐng)求表示這是 上一篇文章講述了Retrofit的簡(jiǎn)單使用,這次我們學(xué)習(xí)一下Retrofit的各種HTTP請(qǐng)求. Retrofit基礎(chǔ) 在Retrofit中使用注...

    wanghui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<