Android Retrofit框架的使用和个人见解

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

你可能感兴趣的:(android,android,square)