Retrofit学习笔记

初识Retrofit

1基本使用

首先Retrofit是通过Interface来管理HTTP API,而且这个接口不能继承其他接口

public interface APIService {
    @FormUrlEncoded
    @POST("login")
    Flowable<HttpResult<UserInfoData>> login(@FieldMa Map<String,  String> map);//登陆
}

然后通过Retrofit.Builder获取到Retrofit实例,并通过create(clazz)方法获取到我们刚才创建的RetrofitApi接口实例:

Retrofit retrofit=new Retrofit.Builder()
    .baseUrl(baseurl)
    .build();

RetrofitApi retrofitApi=retrofit.create(APIService .class);

有了RetrofitApi实例之后,我们就可以在需要网络请求的地方调用了:

Call<BaseResult<User>> userCall=retrofitApi.login();

注:baseUrl("")中的url必须以’/'结尾,否则会报异常;@GET(“public”)中的url如果是需要拼接在baseUrl之后的则不要以‘/’开头。

2.Retrofit的注解

HTTP注解-GET 写法:

@GET("public")
Call<BaseResult<List<User>>> getUser();

HTTP注解-POST 写法:

@POST("User")
Call<BaseResult<String>> addUser();

Retrofit支持三种标记类注解,分别是:FormUrlEncoded、Multipart、Streaming。

标记类注解-FormUrlEncoded:指请求体是一个Form表单,Content-Type=application/x-www-form-urlencoded,需要和参数类注解@Field,@FieldMap搭配使用;

@FormUrlEncoded
@POST("login")
Flowable<HttpResult<UserInfoData>> login(@FieldMap Map<String, String> map);

@FormUrlEncoded
@POST("public")
Call<BaseResult> addUser(@Field("userName") String userName);

标记类注解-Multipart:指请求体是一个支持文件上传的Form表单,Content-Type=multipart/form-data,需要和参数类注解@Part,@PartMap搭配使用

@Multipart
@POST("public")
Call<BaseResult> uploadFile(@Part MultipartBody.Part file);

@Multipart
@POST("users/image")
Call<BaseResponse<String>> uploadFilesWithParts
(@Part() List<MultipartBody.Part> parts);

@POST("users/image")
Call<BaseResponse<String>> uploadFileWithRequestBody
(@Body  MultipartBody multipartBody);

使用@Multipart注解方法,并用@Part注解方法参数,类型是List< okhttp3.MultipartBody.Part>
不使用@Multipart注解方法,直接使用@Body注解方法参数,类型是okhttp3.MultipartBody
标记类注解-Streaming:指响应体的数据以流的形式返回,如果不使用默认会把数据全部加载到内存,所以下载文件时需要加上这个注解

@Streaming
@GET("download")
Call<ResponseBody> downloadFile();

参数类注解-Headers:添加请求头,作用于方法

@Headers("Cache-Control: max-age=640000")
@GET("public")
Call<BaseResult<List<User>>> getUser();
或
@Headers({
"Cache-Control: max-age=640000"
"User-Agent: Retrofit-Sample-App"
})
@GET("public")
Call<BaseResult<List<User>>> getUser();

参数类注解-Header:用于动态添加头部,作用于方法参数

@GET("public")
Call<BaseResult<List<User>>> getUser(@Header("Token") String token);

参数类注解-Body:用于非表单请求体,作用于方法参数
第一种

@POST("user")
Call<BaseResult<String>> addUser(@Body User user);

第二种

@POST("{api}")
Observable<String> request(@Path("api") @NonNull String api,
                           @Body  Map<String, Object> para);

参数类注解-Url:用于动态改变Url,作用于方法参数

@GET("public")
Call<BaseResult<List<User>>> getUser(@Url String url);

请求的时候,url会替换掉public

参数类注解-Path:用于替换请求地址,作用于方法参数

@GET("{public}")
Call<BaseResult<List<User>>> getUser(@Path("public") String path);

请求的时候,path会替换掉public

参数类注解-Field:用于表单字段参数,(需要配合FormUrlEncoded使用)作用于方法参数

@FormUrlEncoded
@POST("public")
Call<BaseResult> addUser(@Field("userName") String userName);

参数类注解-FieldMap:用于表单字段参数,接收Map实现多个参数,(需要配合FormUrlEncoded使用)作用于方法参数

@FormUrlEncoded
@POST("public")
Call<BaseResult> addUser(@FieldMap Map<String,String> fieldMap);

参数类注解-Part:用于表单字段参数,适用于文件上传,(需要配合Multipart使用)作用于方法参数

@Multipart
@POST("public")
Call<BaseResult> uploadFile(@Part MultipartBody.Part file);

参数类注解-PartMap:用于表单字段参数,适用于文件上传,(需要配合Multipart使用)作用于方法参数

@Multipart
@POST("public")
Call<BaseResult> uploadFile(@PartMap Map<String,RequestBody> RequestBodyMap);

参数类注解-Query:用于条件字段参数,作用于方法参数(主要在GET中使用)

@GET("public")
Call<BaseResult<List<User>>> getUser(@Query("userId") String userId);

参数类注解-QueryMap:用于条件字段参数,作用于方法参数(主要在GET中使用)

@GET("public")
Call<BaseResult<List<User>>> getUser(@QueryMap Map<String,String> map);

参数类注解-@Body 作用于方法参数

@POST("public")
Call<BaseResult<List<User>>> getUser(@Body( User user);

注:

使用Post请求方式(数据都是被放在请求体中上传到服务器):
1、表单提交:建议使用Field或FieldMap+FormUrlEncoded,以键值对上传到服务器;
2、JSON提交:建议使用@Body,大部分都是实体类,最后将实体类转换为JSON,上传服务器;
使用GET请求(将参数拼接在url后面的)
1、建议使用Query或QueryMap都是将参数拼接在url后面的;
转自
作者:廉颇未老
链接:https://www.jianshu.com/p/1f3b646db6d5
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分毕业设计项目)基于SSM与MySQL的医院预约挂号系统源码及数据库(高分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值