简单上手
依赖:
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请求
先创建一个接口,定义如下:
public interface TestService{
//@GET表示一个GET请求,参数无(参数无可以写 . 或者 / 但是不能不写,会报错)
@GET("/")
Call<ResponseBody> getBaidu();
}
接着我们在MainActivity中如下操作:
//创建retrofit实例,注意baseUrl的参数是必须以“/”结尾的,不然会报url错误异常;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.baidu.com/")
.build();
//用Retrofit创建一个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) {
//请求成功的回调,该方法在主线程执行
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
//该方法在主线程执行
}
});
带参数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请求,都可以这样填充参数的;
网友评论