對Retrofit的認識

對Retrofit的認識android

Retrofit 是基於 OkHttp 封裝的一套 RESTful(RESTful是一套api設計的風格) 網絡請求框架json

Retrofit是在okhttp基礎之上作的封裝,項目中能夠直接用了。api

Retrofit與Retrofit 2.0(兩者分工協做)的區別:markdown

Retrofit是一個RESTful的HTTP網絡請求框架的封裝,專一於接口的封裝。網絡

Retrofit 2.0 開始內置 OkHttp,專一於網絡請求的高效。框架

經過Retrofit請求網絡的原理:使用 Retrofit 接口層封裝請求參數、Header、Url 等信息,以後由 OkHttp 完成後續的請求操做,在服務端返回數據以後,OkHttp 將原始的結果交給 Retrofit,後者根據用戶的需求對結果進行解析。異步

Retrofit 是一個 RESTful 的 HTTP 網絡請求框架的封裝,網絡請求的工做本質上是 OkHttp 完成,而 Retrofit 僅負責 網絡請求接口的封裝。ide

Retrofit框架網絡請求流程圖:post

圖片.png

1、與安卓集成gradle

  1. 添加依賴(在build.gradle文件中添加依賴)

build.gradle下添加:其中第一個爲添加retrofit,第二及第三個爲添加json解析,這裏採用的是GSON

implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.google.code.gson:gson:2.7'
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
複製代碼
  1. 加入 OkHttp 配置
// 建立 OKHttpClient
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(1000*60, TimeUnit.SECONDS);//*鏈接超時時間*
builder.writeTimeout(1000*60,TimeUnit.SECONDS);//*寫操做超時時間*
builder.readTimeout(1000*60,TimeUnit.SECONDS);//*讀操做超時時間*
複製代碼
  1. 加入 retrofit 配置
ApiConfig.BASE_URL = "https://wanandroid.com/";
// 建立 OKHttpClient
OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
httpBuilder.connectTimeout(1000*60, TimeUnit.SECONDS);//鏈接超時時間
httpBuilder.writeTimeout(1000*60,TimeUnit.SECONDS);//寫操做超時時間
httpBuilder.readTimeout(1000*60,TimeUnit.SECONDS);//讀操做超時時間
        
 // 建立Retrofit
mRetrofit = new Retrofit.Builder() 
.client(httpBuilder.build()) 
.addConverterFactory(GsonConverterFactory.create()) 
.baseUrl(ApiConfig.BASE_URL) 
.build();
複製代碼
  1. 定義HTTP的API對應的接口:
public interface ApiService {
 
   @GET("wenda/comments/{questionId}/json") 
   Call<Map<Object,Object>> getWendaList(@Path("questionId") String questionId); 


複製代碼

上面的接口定義就會調用服務端URL爲wanandroid.com/wenda/comme… 問題id/json需返回定義好對象!

  1. 請求接口

Call對象有兩個請求方法:

1.Enqueue異步請求方法

2.Exectue同步請求方法

異步請求:

public void postAsnHttp(){
       ApiService httpList = mRetrofit.create(ApiService.class);
       調用實現的方法來進行同步或異步的HTTP請求:
       Call<Map<Object, Object>> wendaList = httpList.getWendaList("14500");
       wendaList.enqueue(new Callback<Map<Object, Object>>() {
           @Override
           public void onResponse(Call<Map<Object, Object>> call, Response<Map<Object, Object>> response) {
               Log.i("111111","onResponse:"+response.body().toString());
           }

           @Override
           public void onFailure(Call<Map<Object, Object>> call, Throwable t) {


           }
       });
   }
}
複製代碼

同步請求

try { 
     //同步請求 
    Response<Map<Object, Object>> response = call1.execute(); 
    If (response.isSuccessful()) { 
         Log.d("Retrofit2Example", response.body().getDesc()); 
    } 
} catch (IOException e) {
    e.printStackTrace();
} 
複製代碼
相關文章
相關標籤/搜索