Retrofit使用总结
16lz
2021-01-25
Retrofit-一个对Android和Java类型安全的HTTP客户端
引言
Retrofit把你的HTTP API变成了Java接口
public interface GitHubService { @GET("users/{user}/repos") Call> listRepos(@Path("user") String user);}
生成类
retrofit生成GitHubService接口的一个实现
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build();GitHubService service = retrofit.create(GitHubService.class);
获得Call对象
每个GitHubService实现类获得的Call对象都能实现一个对远程服务器的同步和一部访问
Call> repos = service.listRepos("octocat");
使用注释来描述HTTP 请求
1.URL参数的替换和查询(query)
2.对象转化成JSON请求
3.Multipart请求和上传
API 介绍
方法和参数的注释表明了请求如何被执行
1.请求方法
每一个方法都有一个请求注释,代表了请求方式和相关的url。有五种基本的请求方式注释:GET, POST, PUT, DELETE, and HEAD.
相关的链接在括号里写明了。
e.g.:
@GET("users/list")//也可以写明查询参数@GET("users/list?sort=desc")
2.URL
请求的URL可以被动态的改变
可以用{id}和@path (“id”)实现动态替换,两个id必须相同
@GET("group/{id}/users")Call> groupList(@Path("id") int groupId)
;
查询参数的动态替换
链接:group/{id}/users?sort = sort
e.g.:
@GET("group/{id}/users")Call> groupList(@Path("id") int groupId, @Query("sort") String sort);
复杂的查询参数用map实现
@GET("group/{id}/users")Call<List> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
3.请求体对象
当请求体是对象的时候,可以用@body标签
@POST("users/new")Call<User> createUser(@Body User user);
4.表单和MULTIPART
@FormUrlEncoded注释用于表单数据的提交,@Field用于标识每个键值对
@FormUrlEncoded@POST("user/edit")Call updateUser(@Field("first_name") String first, @Field("last_name") String last) ;
Multipart请求是用@ Multipart注释来标识的,每一部分的请求是 @Part标识
@Multipart@PUT("user/photo")Call updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description) ;
5. HEADER部分
可以使用@Headers注释设置一个静态头
@Headers("Cache-Control: max-age=640000")@GET("widget/list")Call> widgetList();
@Headers({ "Accept: application/vnd.github.v3.full+json", "User-Agent: Retrofit-Sample-App"})@GET("users/{username}")Call getUser(@Path("username") String username);
在参数部分使用@Header进行动态头的设置
@GET("user")Call getUser(@Header("Authorization") String authorization)
在Android中,callBACK将被在主线程中执行,在Java中,将被在调用的线程执行。
Retrofit配置
CONVERTERS转化器定制
常见的五种
Gson: com.squareup.retrofit2:converter-gsonJackson: com.squareup.retrofit2:converter-jacksonMoshi: com.squareup.retrofit2:converter-moshiProtobuf: com.squareup.retrofit2:converter-protobufWire: com.squareup.retrofit2:converter-wireSimple XML: com.squareup.retrofit2:converter-simplexml
下面是一个GsonConverterFactory使用的例子
Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") .addConverterFactory(GsonConverterFactory.create()) .build();GitHubService service = retrofit.create(GitHubService.class);
你也可以自己定制。
Retrofit配置导入
MAVEN
<dependency> <groupId>com.squareup.retrofit2groupId> <artifactId>retrofitartifactId> <version>2.2.0version>dependency>
GRADLE
compile 'com.squareup.retrofit2:retrofit:2.2.0'Retrofit requires at minimum Java 7 or Android 2.3.
PROGUARD配置
# Platform calls Class.forName on types which do not exist on Android to determine platform.-dontnote retrofit2.Platform# Platform used when running on Java 8 VMs. Will not be used at runtime.-dontwarn retrofit2.Platform$Java8# Retain generic type information for use by reflection by converters and adapters.-keepattributes Signature# Retain declared checked exceptions for use by a Proxy instance.-keepattributes Exceptions
更多相关文章
- android下的文件权限
- om.android.builder.model.SourceProvider.getShadersDirectorie
- Android(安卓)布局之FrameLayout
- Android(安卓)ndk获取手机内部存储卡的根目录方法
- Android之Bitmap对象和字节流之间的相互转换
- Android(安卓)拿出后台打印数据
- Java反射学习
- cocos2dx 在android手机输入特殊字符导致程序崩溃
- Android(安卓)API之android.widget.Filterable