1. 程式人生 > 其它 >Retrofit--網路請求框架

Retrofit--網路請求框架

一、什麼是Retrofit

Retrofit是Adnroid常用的一種網路請求框架,他是一個基於OkHttp網路請求的封裝了網路請求介面的框架

二、Retrofit的基本使用

1.需要新增Retrofit和OkHttp的依賴
2.新增對應的網路請求許可權
3.建立接受伺服器返回資料的類(類檔案)
4.建立用於描述的網路介面
5.建立Retrofit物件
6.建立網路請求介面的例項
7.傳送網路請求
8.接收並處理返回資料

三、網路請求的一些方法以及引數設定

3.1 介面常見形式:

@Get

public interface XXXX {
    @GET("XXXX") Call<ResponseBody> getCall();
}
//XXX是url後面是根據前後端通訊url具體定義的引數形式

@POST

public interface PostRequestGridPageTaskList {
    @Headers({"Content-Type: application/json","Accept: application/json"})
    @POST("XXXXX{id}")
    Call<ResponseBody> getCall(@Path("id") int id);
}
// {id} 表示是一個變數
// headers裡的是一個具體的頭形式

3.2 上傳格式:

@FromUrlEncoded

每個鍵值對需要用@Filed來註解鍵名;

@Multipart

適用於有檔案上傳的場景,每個鍵值對需要用@Part來註解鍵名;

@Path

適用於url地址引數需要變化的場景

 @POST("/form")
        @FormUrlEncoded
        Call<ResponseBody> XXX(@Field("name") String name, @Field("age") int age);

//

@POST("/form")
        @Multipart
        Call<ResponseBody> XXX(@Part("name") RequestBody name, @Part("age") RequestBody age, 
                                           @Part MultipartBody.Part file);

// @GET("users/{user}") Call<ResponseBody> getBlog(@Path("user") String user ); // 訪問的API是:https://XXXX/user/{user}// 在發起請求時, {user} 會被替換為方法的第一個引數 user(被@Path註解作用) }

四、Retrofit建立例項

//建立retrofit物件
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fanyi.youdao.com/") 
// 設定網路請求的Url地址
                .addConverterFactory(GsonConverterFactory.create()) 
// 設定資料解析器 一般用GJson
                .build();
//建立介面XXX的例項
XXX request = retrofit.create(XXX.class);
//對傳送請求進行封裝 XXX是介面中定義好的responseBody
Call<ResponseBody> call = request.XXX();
//傳送網路請求(非同步)
        call.enqueue(new Callback<Translation>() {
            //請求成功時回撥
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                //處理返回的資料結果
                response.body().show();
            }

            //請求失敗時回撥
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                System.out.println("連線失敗");
            }
        });
    }