簡單上手
依賴:
compile 'com.squareup.retrofit2:retrofit:2.3.0'
//可選
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依賴包
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依賴包
上面的2個可選依賴庫是用來在Retrofit調用返回時候做類型轉換用的,現在我們先忽略泌神;
無參GET請求
先創(chuàng)建一個接口良漱,定義如下:
public interface TestService{
//@GET表示一個GET請求舞虱,參數無(參數無可以寫 . 或者 / 但是不能不寫,會報錯)
@GET("/")
Call<ResponseBody> getBaidu();
}
接著我們在MainActivity中如下操作:
//創(chuàng)建retrofit實例,注意baseUrl的參數是必須以“/”結尾的母市,不然會報url錯誤異常矾兜;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.baidu.com/")
.build();
//用Retrofit創(chuàng)建一個TestService的代理對象(我們沒有辦法直接調用TestService接口里面的方法)
TestService testService = retrofit.create(TestService.class);
//拿到代理對象,然后調用該方法
Call<ResponseBody> call = testService.getBaidu();
//用法和OkHttp的call如出一轍,不同的是它的回調在主線程患久;
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call,Response<ResponseBody> response) {
//請求成功的回調椅寺,該方法在主線程執(zhí)行
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
//該方法在主線程執(zhí)行
}
});
帶參數GET的請求
我們以一個登錄操作為例子
我們在上面的接口中加入另外一個方法:
public interface TestService{
//@GET表示一個GET請求,參數無(參數無可以寫 . 或者 / 但是不能不寫蒋失,會報錯)
@GET("/")
Call<ResponseBody> getBaidu();
@GET("test/login.php")//這里是有path路徑的
Call<ResponseBody> toLogin(@QueryMap Map<String ,String> map);
}
然后我們在Activity中如下:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://localhost/")
.build();
TestService testService = retrofit.create(TestService.class);
Call<ResponseBody> call = testService.toLogin();
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call,Response<ResponseBody> response) {
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
注意:上面例子的完整URL是https://localhost/test/login.php返帕,Retrofit的baseUrl的參數是https://localhost/,也就是url的host部分篙挽,我們不能在baseUrl中把后面的path路徑test/login.php也加進去荆萤,一旦你加進去,最后底層請求url就變成了https://localhost/?username=123&password=123铣卡,后面的path路徑給截掉了链韭。所以我們只能在定義接口的地方把path路徑給加進去;@GET(test/login.php)
另外我們在接口的方法中還可如下操作:
@GET("test/login.php")//這里是有path路徑的
Call<ResponseBody> toLogin(@Query("username") String username,
@Query("password") String password);
這里@Query("username")就是鍵煮落,后面的username就是具體的值了敞峭,值得注意的是Get和Post請求,都可以這樣填充參數的蝉仇;