国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

codeGoogle / 2993人閱讀

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

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

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

官方的文檔是用GitHub的API說明使用過程的,有的童鞋可能從沒用過GitHub的API(比如我),為了簡單易懂,這里我使用一個查詢手機(jī)歸屬地的API來說明Retrofit的使用過程。

集成

目前我使用的是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"

說明:

Retrofit依賴于okhttp,所以需要集成okhttp

API返回的數(shù)據(jù)為JSON格式,在此我使用的是Gson對返回數(shù)據(jù)解析.請使用最新版的Gson

butterknife是用來View綁定的,可以不用寫那些煩人的findViewById

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

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

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

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

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

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

public class PhoneResult {
    /**
     * errNum : 0
     * retMsg : success
     * retData : {"phone":"15210011578","prefix":"1521001","supplier":"移動","province":"北京","city":"北京","suit":"152卡"}
     */
    private int errNum;
    private String retMsg;
    /**
     * phone : 15210011578
     * prefix : 1521001
     * supplier : 移動
     * 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有個插件 GsonFormat可以很方便地將Json數(shù)據(jù)轉(zhuǎn)為Java對象.

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

首先,按照官方的說明,我們需要創(chuàng)建一個接口,返回Call

官方范例:

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

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

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

首先我們需要填寫API的相對地址:/apistore/mobilenumber/mobilenumber

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

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

@Header用來添加Header

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

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

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

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

使用分為四步:

創(chuàng)建Retrofit對象

創(chuàng)建訪問API的請求

發(fā)送請求

處理結(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對象
    Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create())//解析方法
            .baseUrl(BASE_URL)//主機(jī)地址
            .build();
            
    //2.創(chuàng)建訪問API的請求
    PhoneService service = retrofit.create(PhoneService.class);
    Call call = service.getResult(API_KEY, phoneView.getText().toString());
    
    //3.發(fā)送請求
    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) {

        }
    });
}

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

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

驗(yàn)證

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

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

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

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

更多文章請?jiān)L問我的博客:DevWiki Blog

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65570.html

相關(guān)文章

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

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

    wanghui 評論0 收藏0

發(fā)表評論

0條評論

codeGoogle

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<