零
![Android中Retrofit框架的基礎使用(請求資料並解析)](https://i.iter01.com/images/56ce499817ece62f4df2782211270dd3e91630956d802961b0ccd8c250dca0a7.jpg)
零點一
Retrofit是Android中很流行的Http框架,我們只需要設定請求什麼資源,Retrofit就可以幫我們設定Http請求、解析JSon等等功能。
一、我們要獲取什麼
我們準備獲取解析json格式的資料,URL是:
https://api.github.com/users/Guolei1130
比如我們需要知道這段JSon的login。
二、使用前的準備
思路很清晰:1、連線伺服器拿到資料2、解析資料。 使用之前我們首先要匯入Retrofit在build.gradle中新增依賴。
在這裡----->
![Android中Retrofit框架的基礎使用(請求資料並解析)](https://i.iter01.com/images/b4e016f4cdb5ce16609583b3f645269663521f1da5b3bc5ef9262ca5847347df.jpg)
新增這個---->
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框架的基礎使用(請求資料並解析)](https://i.iter01.com/images/f2e6bb2c8cf65ed432f4b8f17218006ac02e0b1c168ea3b76a358e33981792f9.jpg)