在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解析可以参考官方文档

更多相关文章

  1. SpringSource通过Spring for Android(安卓)1.0将Spring Framewor
  2. Maven开发Android指南
  3. Android处理屏幕旋转时的解决方案
  4. Android(安卓)SQLite使用方法
  5. Android向服务器传接和接收数据的方法汇总
  6. android - 为安全而设计 - 2 - 开发文档翻译
  7. android下socket的ip配置
  8. Android(安卓)UI开发第二十八篇——Fragment中使用左右滑动菜单
  9. android - 为安全而设计 - 2 - 开发文档翻译

随机推荐

  1. android fitsSystemWindows的使用
  2. Android--Listview横向滑动
  3. Android(安卓)百度地图 简单实现--- 美食
  4. android的ListView图文混搭
  5. WebView中的视频播放
  6. ANDROID常用权限记录
  7. Android(安卓)Studio builde.gradle 配置
  8. [置顶] Android(安卓)Studio Android(安
  9. Android搜索自动提示功能 AutocompleteTe
  10. Android系统应用不支持读写存储