官网 http://square.github.io/retrofit/
GitHub https://github.com/square/retrofit
介绍了Retrofit简单使用
新建项目
添加权限
添加依赖
compile 'com.squareup.retrofit2:retrofit:2.3.0'
添加解析器,这里展示两种常用的解析器(选择合适的一种即可)
更多请参考https://github.com/square/retrofit/tree/master/retrofit-converters
compile 'com.squareup.retrofit2:converter-scalars:2.3.0' //String解析器
compile 'com.squareup.retrofit2:converter-gson:2.3.0' //gson解析器
测试接口(这里使用了nohttp提供的接口) http://api.nohttp.net/
1.Retrofit的简单使用
新建一个接口HttpService:
public interface HttpService {
@GET("top250")
Call getTop(@Query("start") int start, @Query("count") int count);
@FormUrlEncoded
@POST("postBody")
Call getUpload(@Field("aaa") String aaa, @Field("bbb") String bbb);
}
使用
- GET请求
//请求接口 https://api.douban.com/v2/movie/top250?start=0&count=2
private void netGet() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.douban.com/v2/movie/")
.addConverterFactory(GsonConverterFactory.create()) //转换器
.build();
HttpService httpService = retrofit.create(HttpService.class);
Call top = httpService.getTop(0, 2);
top.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
Zx.d(response.toString());
Zx.d(response.headers());
DouBanBean douBanBean = response.body();
}
@Override
public void onFailure(Call call, Throwable t) {
Zx.d(t.getMessage());
}
});
}
- POST请求
//请求接口 http://api.nohttp.net/postBody aaa=111 bbb=222
private void netPost() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.nohttp.net/") //地址
.addConverterFactory(ScalarsConverterFactory.create()) //转换器
.build();
HttpService httpService = retrofit.create(HttpService.class);
Call upload = httpService.getUpload("111", "222");
upload.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
Zx.d(response.toString());
Zx.d(response.headers());
Zx.d(response.body());
}
@Override
public void onFailure(Call call, Throwable t) {
Zx.d(t.getMessage());
}
});
}
over
其中@GET @POST指定了请求方法,Retrofit框架提供了很多注解,其中HTTP注解有五个
@GET
@POST
@PUT
@DELETE
@HEAD
GET
- @Path 替换参数
@GET("group/{id}/users")
List groupList(@Path("id") int groupId);
这里使用了传入的groupId替换了"group/{id}/users"中的{id}
- @Query 查询参数
@GET("login")
List httpLogin(@Query ("name") String name,@Query ("password") String password);
这里相当于login?name=xxx&password=xxx
- 同时存在的情况 可在后面继续添加@Path或@Query,或将多个查询参数放入Map中
@GET("group/{id}/users")
List groupList(@Path("id") int groupId,@Query ("name") String name,@Query("password") String password);
//或
@GET("group/{id}/users")
List groupList(@Path("id") int groupId,@QueryMap Map options);
POST
- 提交表单数据
@FormUrlEncoded
@POST("postBody")
Call getLogin(@Field("name") String name, @Field("password") String password);
使用 @FormUrlEncoded 修饰请求方法,可以把表单数据提交到服务端
用 @Field 修饰key-value对
上传文件
使用 @Multipart 修饰请求方法
@Multipart
@POST("images")
Call upload(@Part("description") RequestBody description, @Part MultipartBody.Part file);
private void netUpload() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.sss.saa/do/")
.addConverterFactory(ScalarsConverterFactory.create())
.build();
HttpService httpService = retrofit.create(HttpService.class);
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "aaa");
RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), new File(""));
MultipartBody.Part part = MultipartBody.Part.createFormData("pototo", "", fileBody);
httpService.upload(requestBody, part);
}
推荐阅读:
给 Android 开发者的 RxJava 详解
RxJava 与 Retrofit 结合的最佳实践
Retrofit2.0使用详解
你真的会用Retrofit2吗?Retrofit2完全教程