仅供个人学习记录,未完待续
常用retrofit注解方式的使用:
1、get请求:
@GET(……)
使用@query或者@querymap进行注解
Call<> getMsg(@Query(“name”) String name)
Call<> getMsg(@QueryMap Map<String,String>params)
假如你需要添加相同Key值,但是value却有多个的情况,一种方式是添加多个@Query参数,还有一种简便的方式是将所有的value放置在列表中,然后在同一个@Query下完成添加,实例代码如下:
@GET("...")
Call<> getSearchBooks(@Query("name") List<String> name);
@Path
@Get(…{user}..)
使用path进行接收,组成完整url
Call<> getMsg(@Path(“user”) String user)
使用@Path时,path对应的路径不能包含”/”,否则会将其转化为%2F。在遇到想动态的拼接多节url时,还是使用@Url吧。
2、post请求:
使用@Field或者@FieldMap进行注解
@FormUrlEnoded
@POST
Call getMsg(@Field(“pwd”) String pwd)
Call getMsg(@FieldMap Map<String,String> params)
3、传文件
@Multipart
@POST
Call getMsg(@Part(“fileName”) RequestBody fileName,@Part MultipartBody.Part file)
// 创建 RequestBody,用于封装构建RequestBody
RequestBody pictureNameBody =
RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), “fileName");
File file= new File(path);
RequestBody requestFile =
RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), file);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part picturePart = MultipartBody.Part.createFormData(“file”, file.getName(), requestFile);
4、传多个文件
@Multipart
@POST(“…“)
Call create(@Part(“fileName") RequestBody fileName,@PartMap Map<String,RequestBody> files
RequestBody fileNameBody = RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), fileName);
File file= new File(path);
RequestBody requestFile = RequestBody.create(MediaType.parse(AppConstants.CONTENT_TYPE_FILE), file);
Map<String,RequestBody> params = new HashMap<>();
params.put(“file\”; filename=\"" + file.getName() + "", requestFile);
5、传入多个文件
@Multipart
@POST("hz/api/consultation")
Flowable uploadFilesConsultation(@PartMap Map map,@Part List parts);
final Map params = new HashMap<>();
//以下参数是伪代码,参数需要换成自己服务器支持的
params.put("token", convertToRequestBody(token));
params.put("acceptPerson",convertToRequestBody(accpetPerson));
List partList = filesToMultipartBodyParts(files);
private RequestBody convertToRequestBody(String param) {
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), param);
return requestBody;
}
private List<MultipartBody.Part> filesToMultipartBodyParts(List<PicAddModel> files) {
List<MultipartBody.Part> parts = new ArrayList<>();
for (PicAddModel file : files) {
for (LocalMedia localMedia : file.getFiles()) {
File file1 = new File(localMedia.getPath());
RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), file1);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getType() + "", requestBody);
parts.add(part);
}
}
return parts;
}
//.....调用接口
6、@Header
7、@Url 动态的url地址请求
@GET
Call<List<Repo>> listRepos(@Url String user);
8、json
@POST("api/FlyRoute/Add")
Call<FlyRouteBean> postFlyRoute(@Body RequestBody route);//传入的参数为RequestBody
RequestBody body=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),route);
网友评论