摘要:公司開源了許多優秀的庫,就是其中之一。是用來簡化訪問服務器,如果你的服務器使用的使,那么趕緊使用吧。官方的文檔是用的說明使用過程的,有的童鞋可能從沒用過的比如我,為了簡單易懂,這里我使用一個查詢手機歸屬地的來說明的使用過程。
Square公司開源了許多優秀的庫,Retrofit就是其中之一。
Retrofit是用來簡化APP訪問服務器API,如果你的服務器使用的使RESTAPI,那么趕緊使用Retrofit吧。
官方的文檔是用GitHub的API說明使用過程的,有的童鞋可能從沒用過GitHub的API(比如我),為了簡單易懂,這里我使用一個查詢手機歸屬地的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返回的數據為JSON格式,在此我使用的是Gson對返回數據解析.請使用最新版的Gson
butterknife是用來View綁定的,可以不用寫那些煩人的findViewById了
返回的數據格式使用的是百度的API Store提供的API,地址在此:手機號碼歸屬地__API服務_API服務_API Store.
該接口的API主機地址為:http://apis.baidu.com,資源地址為:/apistore/mobilenumber/mobilenumber
需要一個key等于apikey的Header和一個key等于phone的查詢關鍵字,而且該請求為GET請求.
所以我們需要構造一個GET請求,添加一個Header,添加一個Query關鍵字,訪問該API返回的數據格式如下:
{ "errNum": 0, "retMsg": "success", "retData": { "phone": "15210011578", "prefix": "1521001", "supplier": "移動", "province": "北京", "city": "北京", "suit": "152卡" } }
根據返回結果我們創建數據對象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數據轉為Java對象.
實現過程 構建首先,按照官方的說明,我們需要創建一個接口,返回Call
官方范例:
public interface GitHubService { @GET("users/{user}/repos") Call> listRepos(@Path("user") String user); }
這里我們創建一個名為PhoneService的接口,返回值為Call
public interface PhoneService { @GET("") CallgetResult(); }
首先我們需要填寫API的相對地址:/apistore/mobilenumber/mobilenumber
public interface PhoneService { @GET("/apistore/mobilenumber/mobilenumber") CallgetResult(@Header("apikey") String apikey, @Query("phone") String phone); }
接著我們要添加一個Header和一個Query關鍵字,在這里我們需要使用Retrofit提供的注解:
@Header用來添加Header
@Query用來添加查詢關鍵字
那么,我們的接口就如下了:
public interface PhoneService { @GET("/apistore/mobilenumber/mobilenumber") Call使用getResult(@Header("apikey") String apikey, @Query("phone") String phone); }
構建好接口以后,可以使用了!
使用分為四步:
創建Retrofit對象
創建訪問API的請求
發送請求
處理結果
代碼如下所示:
private static final String BASE_URL = "http://apis.baidu.com"; private static final String API_KEY = "8e13586b86e4b7f3758ba3bd6c9c9135"; private void query(){ //1.創建Retrofit對象 Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create())//解析方法 .baseUrl(BASE_URL)//主機地址 .build(); //2.創建訪問API的請求 PhoneService service = retrofit.create(PhoneService.class); Callcall = service.getResult(API_KEY, phoneView.getText().toString()); //3.發送請求 call.enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { //4.處理結果 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()是個啥?
官方文檔也說明了,這是用來轉換服務器數據到對象使用的.該Demo中使用API返回的數據是JSON格式,故此使用Gson來轉換,如果服務器返回的是其他類型的數據,則根據需要編寫對應的解析方法.
驗證好了,現在可以驗證一下了!
編譯APP,安裝到手機,界面如下:
輸入手機號碼,然后點擊查詢按鈕,結果如下:
項目代碼詳見此處:Dev-Wiki/RetrofitDemo
更多文章請訪問我的博客:DevWiki Blog
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65570.html
摘要:上一篇文章講述了的簡單使用這次我們學習一下的各種請求基礎在中使用注解的方式來區分請求類型比如表示一個請求括號中的內容為請求的地址格式含義表示這是一個請求表示這個一個請求表示這是一個請求表示這是一個請求表示這是一個請求表示這是一個請求表示這是 上一篇文章講述了Retrofit的簡單使用,這次我們學習一下Retrofit的各種HTTP請求. Retrofit基礎 在Retrofit中使用注...
閱讀 2289·2021-11-24 09:38
閱讀 1985·2021-11-22 14:44
閱讀 1150·2021-07-29 13:48
閱讀 2614·2019-08-29 13:20
閱讀 1115·2019-08-29 11:08
閱讀 2046·2019-08-26 10:58
閱讀 1264·2019-08-26 10:55
閱讀 3148·2019-08-26 10:39