Android(安卓)Retrofit框架的使用和个人见解
16lz
2021-12-04
在Android开发中经常会处理网络请求,接触这个框架也有一段时间了,它给了我很多的帮助,希望能分享给android新人。
-
- 简介
- 特点
- 官方
- 使用
- 一般的GETPOSTPUTPATCHDELETE方法
- 文件上传
- 可能遇到的问题
简介
Retrofit官方给出的简介是这样的。
Type-safe HTTP client for Android and Java by Square, Inc.
简而言之就是帮我们处理好了很多Android网络请求相关的事情,比如异步加载数据、解析json、上传文件等
推荐Okhttp搭配使用,因为retrofit是优先使用okhttp。
特点
- 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方法
//创建Retrofit接口,这里用回调方式public class API { public interface MyService { @GET("/{id}/api") void getFoods(@path("id") int id ,@QueryMap Map param,Callback<> callback); //这里要注意的是 post跟Patch方法都需要传Body(RESTful规范) @POST("/your/api") void createFood(@Body Food food,Callback callback); //跟post方法类似 @PATCH("/your/api") void modifyFood(@Body Food food ,Callback<> callback); //删除 @DELETE("/{id}/api") void deleteFood(@path("id") int id ,Callback<> callback); } public static MyService service = new RestAdapter.Builder() //设置你的请求EndPoint .setEndpoint(“http://123.0.0.0”) //设置Log提示 .setLogLevel(BuildConfig.DEBUG ? RestAdapter.LogLevel.FULL : RestAdapter.LogLevel.NONE) //设置请求其他参数 例如加header .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>() { @Override public void success(List foods, Response response) { //请求成功 处理你的操作 // foods 为已经解析的数据 // response 含有服务器返回的所有信息 } @Override public void failure(RetrofitError error) { //请求失败 //error含有所有错误信息 //例如 error.getKind() == RetrofitError.Kind.NETWORK 网络连接异常 //error.getResponse().getStatus(); 获取HTTP错误代码 } });
文件上传
//创建接口@Multipart@POST("/images")void upload(@Part("file") TypedFile file, Callback callback);//使用API.service.upload(new TypedFile("image/jpg",yourFile), new Callback() @Override public void success(File file, Response response) { //请求成功 处理你的操作 // foods 为已经解析的数据 // response 含有服务器返回的所有信息 } @Override public void failure(RetrofitError error) { //请求失败 //error含有所有错误信息 } });
可能遇到的问题
- 如果需要单纯的获取服务器传来的json(也就是不解析)建议直接使用okhttp来获取网络。
- 注意:post跟Patch方法都需要传Body对象,这也是RESTful的规范
- 需要重写GSON解析可以参考官方文档
更多相关文章
- SpringSource通过Spring for Android(安卓)1.0将Spring Framewor
- Maven开发Android指南
- Android处理屏幕旋转时的解决方案
- Android(安卓)SQLite使用方法
- Android向服务器传接和接收数据的方法汇总
- android - 为安全而设计 - 2 - 开发文档翻译
- android下socket的ip配置
- Android(安卓)UI开发第二十八篇——Fragment中使用左右滑动菜单
- android - 为安全而设计 - 2 - 开发文档翻译