項目地址: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任何配置緩存的,適合新手看,後續有時間再寫寫複雜的