android Retrofit 官方用例
2016-06-28 12:00
411 查看
第一部分.简介
Retrofit将你的HTTP API转变为Java接口
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
Call<List<Repo>> repos = service.listRepos("octocat");
使用注解描述HTTP请求
a.url参数替换和查询参数支持;
b. 对象转换为请求体(例如,JSON);
c.多部分请求和文件上传.
第二部分:API
接口(如上面的GitHubService)中方法的参数和注解表明改请求的处理方法
1.请求方式
每一个方法必须有一个HTTP注解以便给请求提供相对url,现在有5种自带的注解:
@GET("users/list")
您还可以在“网址”中指定查询参数
@GET("users/list?sort=desc")
2.url相关操作
一个请求URL可以通过替换url中的一部分或者参数来动态更新,被替换的部分应该是字母数字,并且用{ }包裹起来,需要传进去的相应的参数需要用
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
查询参数可以直接在后面添加
GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
复杂的请求参数可以使用一个
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
3.请求体
一个对象可以使用
@POST("users/new")
Call<User> createUser(@Body User user);
4.表单数据和多重数据
方法也可以发送表单数据和上传文件
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
多重数据请求的条件:方法前面使用
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
5.请求头
你可以用
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
记住请求头互相之间不会重写,相同名称的请求头会被汇总到请求中
请求头可以通过使用
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
如果你的每个请求都需要一个相同的请求头,你可以在OkHttp interceptor中配置
鄙人才疏学浅,希望大家多多指教!有翻译的不好的地方,还原指正!!!
Retrofit将你的HTTP API转变为Java接口
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
Retrofit类生成一个实现
GitHubService接口的对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
来源于类对象都能[/code]向远程服务端发起一个同步或者异步的请求GitHubService的实现类的每一个[code]Call
Call<List<Repo>> repos = service.listRepos("octocat");
使用注解描述HTTP请求
a.url参数替换和查询参数支持;
b. 对象转换为请求体(例如,JSON);
c.多部分请求和文件上传.
第二部分:API
接口(如上面的GitHubService)中方法的参数和注解表明改请求的处理方法
1.请求方式
每一个方法必须有一个HTTP注解以便给请求提供相对url,现在有5种自带的注解:
GET,
POST,
PUT,
DELETE, 以及
HEAD,相对url参数限定在注解中
@GET("users/list")
您还可以在“网址”中指定查询参数
@GET("users/list?sort=desc")
2.url相关操作
一个请求URL可以通过替换url中的一部分或者参数来动态更新,被替换的部分应该是字母数字,并且用{ }包裹起来,需要传进去的相应的参数需要用
@Path注解以及保持和上面注解的字符串一致
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
查询参数可以直接在后面添加
GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
复杂的请求参数可以使用一个
Map
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
3.请求体
一个对象可以使用
@Body指定为HTTP请求体
@POST("users/new")
Call<User> createUser(@Body User user);
4.表单数据和多重数据
方法也可以发送表单数据和上传文件
表单数据发送条件:方法前面加了
@FormUrlEncoded注解,每一个键值对用
@Field注解
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
多重数据请求的条件:方法前面使用
@Multipart注解,每部分用
@Part注解
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
5.请求头
你可以用
@Headers注解设置静态的请求头
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
@Headers({ "Accept: application/vnd.github.v3.full+json", "User-Agent: Retrofit-Sample-App" }) @GET("users/{username}") Call<User> getUser(@Path("username") String username);
记住请求头互相之间不会重写,相同名称的请求头会被汇总到请求中
请求头可以通过使用
@Header注解动态配置,相应的参数必须要用@Header
注解,如果值是空的,请求头会被忽略。@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
如果你的每个请求都需要一个相同的请求头,你可以在OkHttp interceptor中配置
鄙人才疏学浅,希望大家多多指教!有翻译的不好的地方,还原指正!!!
相关文章推荐
- android 使用Handler.postDelayed方法实现循环执行定时任务
- 腾讯X5内核的集成和使用
- Android Studio NDK jni 开发生成头文件和加载so库
- android注解
- Android事件分发 (一)
- Android 图片内存溢出java.lang.OutOfMemoryError:
- Android ScrollView滚动 + ListView无滚动条加载全部内容
- Android知识点总结(知识点交汇点)
- 三重Des对称加密在Android、Ios 和Java 平台的实现
- AndroidStudio使用SVN的管理规范
- android自定义view 图片下载进度CoverView
- Android应用开发:Fragment的非中断保存setRetaineInstance
- Android 字符乱码问题的处理
- Android编程实现Home键的屏蔽,捕获与修改方法
- Android Service使用速记
- Android总结篇系列:Android广播机制
- 阿拉伯数字转换为汉字数字
- android 运行项目闪退
- 浅谈Android内存优化
- Android Studio 百度地图 230错误 key校验失败 new解决方案