本文整理记录常用注解的用法
导入
retrofit github链接
导入依赖
java
//导入retrofit,三个包的版本号必须一样
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
//与rxjava配合使用需导入以下的库
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
## 注解使用
### GET
创建业务请求接口,@GET注解就表示get请求,@Query表示请求参数,将会以key=value的方式拼接在url后面
java
public interface BaseService {
@GET("user/id")
Call<Response> getUserInfo(@Query("uid") String uid);
}
如果Query参数比较多,那么可以通过@QueryMap方式将所有的参数集成在一个Map统一传递,还以上文中的get请求方法为例
java
public interface BaseService {
@GET("user/id")
Call<Response> getUserInfo(@QueryMap Map<String, String> options);
}
Post
@FormUrlEncoded将会自动将请求参数的类型调整为application/x-www-form-urlencoded,@Field注解将每一个请求参数都存放至请求体中
java
@FormUrlEncoded
@POST("user/emailRegister")
Observable<HttpResult> emaiRegister(@Field("email") String email,
@Field("password") String password,
@Field("name") String name,
@Field("language") int language);
@FieldMap,同理,通过Map统一传递
java
@FormUrlEncoded
@POST("user/emailRegister")
Observable<HttpResult> emaiRegister(@FieldMap Map<String, String> fields);
@Body,如果Post请求参数有多个,那么可以统一封装到类中
```java
@FormUrlEncoded
@POST(“user/emailRegister”)
Observable
public class Reviews {
public String email;
public String password;
public String name;
public String language;
} ```
header
定义Http请求头参数
java
@Headers({
"Accept: application/vnd.yourapi.v1.full+json",
"User-Agent: Your-App-Name"
})
@POST("user/emailRegister")
Observable<HttpResult> emaiRegister(@Field("email") String email,
@Field("password") String password,
@Field("name") String name,
@Field("language") int language);
### Path
请求的相对地址也是需要调用方传递,那么可以使用@Path注解
java
public interface BaseService {
@GET("user/{id}")
Call<Response> getUserInfo(@Path("id") String id);
}
### Multipart 上传
java
@Multipart
@POST("user/uploadHead")
Observable<HttpResultT<HeadUrl>> uploadHeadPic(@Part("uid") RequestBody userId,
@Part MultipartBody.Part photo);
private void uploadPic(File file) {
BaseService baseService = NetManager.getInstance().create(BaseService.class);
RxManager.getInstance().doSubscribeT(baseService.uploadHeadPic(createBody(), createFilePart("head_pic", file)), new RxSubscriber<HeadUrl>() {
@Override
protected void _onError(Throwable e) {
myLog.e("s: " + e.getMessage());
}
@Override
protected void _onNext(HeadUrl headUrl) {
myLog.d("s: " + headUrl.getHead_url());
myPrefs.picUrl().put(PIC_BASE_URL + headUrl.getHead_url());
}
});
}
private RequestBody createBody() {
return RequestBody.create(
MediaType.parse(MULTIPART_FORM_DATA), myPrefs.uid().get());
}
private MultipartBody.Part createFilePart(String partName, File file) {
// 为file建立RequestBody实例
RequestBody requestFile =
RequestBody.create(MediaType.parse(MULTIPART_FORM_DATA), file);
// MultipartBody.Part借助文件名完成最终的上传
return MultipartBody.Part.createFormData(partName, file.getName(), requestFile);
}
具体使用上,结合RXjava一起用,同时做下简单封装,后面另外写一篇整理