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

//创建Retrofit接口,这里用回调方式
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跟Patch方法都需要传Body(RESTful规范)
@POST("/your/api")
void createFood(@Body Food food,Callback<Response> callback);

//跟post方法类似
@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()
//设置你的请求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<List<Food>>() {
@Override
public void success(List<Food> foods, Response response) {
//请求成功 处理你的操作
// foods 为已经解析的数据
// response 含有服务器返回的所有信息
}

@Override
public void failure(RetrofitError error) {
//请求失败
//error含有所有错误信息
//例如 error.getKind() == RetrofitError.Kind.NETWORK 网络连接异常
//error.getResponse().getStatus(); 获取HTTP错误代码
}
});

文件上传

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) {
//请求成功 处理你的操作
// foods 为已经解析的数据
// response 含有服务器返回的所有信息
}

@Override
public void failure(RetrofitError error) {
//请求失败
//error含有所有错误信息
}
});

可能遇到的问题

  • 如果需要单纯的获取服务器传来的json(也就是不解析)建议直接使用okhttp来获取网络。
  • 注意:post跟Patch方法都需要传Body对象,这也是RESTful的规范
  • 需要重写GSON解析可以参考官方文档

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2017 HACKGROUND All Rights Reserved.

UV : | PV :