新手秒學OkHttp Retrofit框架,適合新手

 

項目地址GitHub項目地址(Kotlin版組件化)

 

Retrofit簡單的一句話就是通過通過代理方式和註解轉換成一個serviceMethod然後調用callFactory執行的okhttp3.Callt得到返回的數據serviceMethod.callAdapter.adapt(okHttpCall)來產生method所定義的返回值

下一章實現Retrofit+RxJava+OkHttp

這章我們來簡單實現OkHttp+Retrofit

1、添加依賴庫

 

implementation 'com.squareup.okhttp3:okhttp:3.4.1'//OkHttp庫
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'//gson庫
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'//retrofit庫
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'//rxjava庫
    implementation 'io.reactivex:rxandroid:1.2.1'//rxandroid庫

2、第二步創建Retrofit對象 

//設置OkHttpClient超時配置

int CONNECT_TIMEOUT = 10;
int READ_TIMEOUT = 20;
int WRITE_TIMEOUT = 20;
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.newBuilder().connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS); // 連接超時時間閾值
okHttpClient.newBuilder().readTimeout(READ_TIMEOUT, TimeUnit.SECONDS);  // 數據獲取時間閾值
okHttpClient.newBuilder().writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS);// 寫數據超時時間閾值
//創建Retrofit
retrofit = new Retrofit.Builder()
        .baseUrl(url)
        .addConverterFactory(GsonConverterFactory.create()) // 設置數據解析器
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())// 支持RxJava平臺
        .client(okHttpClient)//載入Okhttp
        .build();//創建

3、創建請求接口

public interface GetRequest_Interfaces {
//GET請求,參數連接
@GET("login?uphone=2&upassword=2")
Call<User> login();

//GET請求,參數連接自定義參數
@GET("login")
Call<User> login(@Query("uphone") String uphone,@Qunery("upassword") String upassword);

//GET請求,Map鍵值對
@GET("login")
Call<User> login(@QueryMap uphone);

//GET請求,Path形式
@GET("loginget/{uphone}")
Call<User> loginUphone(@Path("uphone") String uphone);


//POST請求,Map鍵值對形式,跟@FormUrlEncoded結合使用
@POST("loginpost")
@FormUrlEncoded//表示請求體是一個form表單
Call<User> doPostLogin(@FieldMap Map<String, String> params);

//POST請求,單個參數形式,跟@FormUrlEncoded結合使用
@POST("loginpost")
@FormUrlEncoded
Call<User> getLoginPost(@Field("uphone") String uphone, @Field("upassword") String upassword);

//POST請求,文件上傳,跟@Multipartd結合使用
    @POST("register")
    @Multipart
    Call<User> Regiseter(@PartMap Map<String, RequestBody> map, @Part MultipartBody.Part file);

//POST請求,多文件上傳,跟@FormUrlEncoded結合使用
    @POST("register")
    @Multipart
    Call<User> RegiseterMore(@PartMap Map<String, RequestBody> map, @Part MultipartBody.Part[] file);

//DELETE請求,刪除,Path形式
@DELETE("logindelete/{uphone}")
Call<User> getLoginDelete(@Path("uphone") String uphone);

//PUT請求,Part/PartMap形式,跟@Multipart結合使用
@PUT("loginput")
@Multipart
Call<User> getLoginPut(@Part("uphone") String uphone, @Part("upassword") String upassword);


//POST請求,文件上傳,跟@Multipartd結合使用的參數封裝;多文件就用數組循環封裝多個就行了
/* //封裝文件
        RequestBody requestBody =
                RequestBody.create(MediaType.parse("application/otcet-stream"), imageFile);
        MultipartBody.Part body =
                MultipartBody.Part.createFormData("imageFile", imageFile.getName(), requestBody);
        //封裝參數
        Map<String,RequestBody> map = new HashMap<>();
        map.put("uphone",RequestBody.create(null,"18682026498"));
        map.put("upassword",RequestBody.create(null,"123456"));
        map.put("uname",RequestBody.create(null,"張三"));*/

//@Body上傳 JSON格式(需要將基類對象轉換成JSONOBJect)
@POST("xxxxxxx")   
Call<Object> login( @Body JSONObject parmas );  

//@Body上傳 JSON格式(需要將基類對象轉換成JSONOBJect)再將JSON轉換成RequestBody上傳
@POST("xxxxxxx")   
Call<Object> login( @Body RequestBodyparmas );  


}
GetRequest_Interfaces getRequest_interfaces = retrofit.create(GetRequest_Interfaces.class);

  這個接口是一個自定義的,名字隨便你取,接口的具體內容如下,裏面採用了post請求與get請求,其中map代表了參數鍵值對

4、將封裝好的參數放入自定義接口中
Call<ResponseBody> call = getRequest_interfaces.doPostLogin(params);
5、執行
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        
    }

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

    }
});

這篇文章是不做Retrofit任何配置緩存的,適合新手看,後續有時間再寫寫複雜的

感謝:https://blog.csdn.net/carson_ho/article/details/73732076

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章