Android Retrofit框架的使用和个人见解
在Android开发中经常会处理网络请求,接触这个框架也有一段时间了,它给了我很多的帮助,希望能分享给android新人。
简介
Retrofit官方给出的简介是这样的。
Type-safe HTTP client for Android and Java by Square, Inc.
简而言之就是帮我们处理好了很多Android网络请求相关的事情,比如异步加载数据、解析json、上传文件等
推荐Okhttp搭配使用,因为retrofit是优先使用okhttp。
特点
- 对RxJava的支持
- Gson解析json,快捷方便的处理网络数据
- 配合Okhttp使用安全快捷的处理异步加载
- 上传文件等处理便捷
官方
官方文档
http://square.github.io/retrofit/
Github地址
https://github.com/square/retrofit
Gradle
compile ‘com.squareup.retrofit:retrofit:2.0.0-beta1’
这是2.0的测试版本,可以去官方看看稳定的低版本
使用
一般的GET、POST、PUT、PATCH、DELETE方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
public class API { public interface MyService { @GET("/{id}/api") void getFoods(@path("id") int id ,@QueryMap Map<String,Object> param,Callback<<List<Food>> callback);
@POST("/your/api") void createFood(@Body Food food,Callback<Response> callback);
@PATCH("/your/api") void modifyFood(@Body Food food ,Callback<<List<Food>> callback);
@DELETE("/{id}/api") void deleteFood(@path("id") int id ,Callback<<List<Food>> callback);
} public static MyService service = new RestAdapter.Builder() .setEndpoint(“http: .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) .setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addHeader("token", "your token"); } }).build().create(MyService.class); }
API.service.getFoods(id,param, new Callback<List<Food>>() { @Override public void success(List<Food> foods, Response response) { }
@Override public void failure(RetrofitError error) { } });
|
文件上传
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Multipart @POST("/images") void upload(@Part("file") TypedFile file, Callback<File> callback);
API.service.upload(new TypedFile("image/jpg",yourFile), new Callback<File>() @Override public void success(File file, Response response) { }
@Override public void failure(RetrofitError error) { } });
|
可能遇到的问题
- 如果需要单纯的获取服务器传来的json(也就是不解析)建议直接使用okhttp来获取网络。
- 注意:post跟Patch方法都需要传Body对象,这也是RESTful的规范
- 需要重写GSON解析可以参考官方文档