Android中Retrofit框架的基礎使用(請求資料並解析)

druidZ發表於2017-12-16

Android中Retrofit框架的基礎使用(請求資料並解析)
//週五啊哈哈哈

零點一

Retrofit是Android中很流行的Http框架,我們只需要設定請求什麼資源,Retrofit就可以幫我們設定Http請求、解析JSon等等功能。

一、我們要獲取什麼

我們準備獲取解析json格式的資料,URL是:

https://api.github.com/users/Guolei1130

比如我們需要知道這段JSon的login。

二、使用前的準備

思路很清晰:1、連線伺服器拿到資料2、解析資料。 使用之前我們首先要匯入Retrofit在build.gradle中新增依賴。

在這裡----->

Android中Retrofit框架的基礎使用(請求資料並解析)

新增這個---->

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
複製程式碼

這時Android studio會提示你同步一下專案,同步完成後注意要在AndroidManifest.xml檔案中申請網路許可權,申請網路許可權新增這個:

<uses-permission android:name="android.permission.INTERNET" />
複製程式碼

這樣就可以使用了。

三、GOGOGO RUSH B

解析類

首先我們要準備一個解析類,來指定我們要獲取的物件model:

code出現,dadada

public class DataModel{
    private String login;//注意這裡的變數名要和解析的JSon中的key相同

    public String getLogin() {
        return login;
    }
}
複製程式碼

解析用的介面

然後我們需要定義一個介面

public interface RequestServices {
    @GET("Guolei1130")//要請求的檔案
    Call<DataModel> getList();//這個方法返回請求到的資料,格式就是我們的解析類
}
複製程式碼

其中 @GET稱為註解,作用是標註我們使用的是get方法請求資料,註解的型別有很多,我們現在只使用最基礎的get。

不過有的時候我們請求的URL是帶有引數的,例如:http://www.abc.com/a/b?pram=c,這裡URL中, ? 後的就是引數,這種情況的話我們這樣處理

@GET("b")
Call<DataModel> getData(
    @Query("pram") String c);
複製程式碼

@query註解就是標註引數,在呼叫這個方法的時候傳參就可以了。

MainActivity中使用

話不多說,直接程式碼見分曉

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://api.github.com/users/")//注意URL最後的“/”很重要不要丟
            .addConverterFactory(GsonConverterFactory.create())//設定資料解析器,用GSON解析
            .build();
    //接下來建立請求例項
    RequestServices requestServices = retrofit.create(RequestServices.class);
    //封裝請求例項
    Call<DataModel> call = requestServices.getList();
    //傳送請求(並設定請求回撥)
    call.enqueue(new Callback<DataModel>() {
        @Override
        public void onResponse(Call<DataModel> call, Response<DataModel> response) {
        //請求成功
            if(response.isSuccess()){
                try {
                    //獲取資料
                    DataModel user = response.body();//這樣資料就按照DataModel解析出來並儲存在user中了
                    Log.v("response-------->",user.getLogin());
                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onFailure(Call<DataModel> call, Throwable t) {
        //請求失敗
        }
    });
複製程式碼

這樣就可以請求到資料並解析出來了。

等等,關於URL是不是還沒講

例如我們請求http://www.abc.com/a/b,那麼不同的baseURL和get註解寫法有區別嗎?(既然說了當然有區別)

baseUrl get註解中的URL 最終請求的URL
http://www.abc.com/a/ /b http://www.abc.com/b
http://www.abc.com/a/ b http://www.abc.com/a/b
http://www.abc.com/a/ http://www.qwe.com/a http://www.qwe.com/a

所以推薦使用第二種方法,簡單清楚。

這樣就可以請求到我們想要的資料並白頭偕老了。O了個動態規劃K

//作為Android開發的初學者,如果我有錯誤的地方或者不足的話歡迎大家指正。

Android中Retrofit框架的基礎使用(請求資料並解析)

相關文章