Android——Retrofit
Retrofit
简介:对OkHttp的封装
根据请求接口,获取响应
注解
方法注解
@GET:声明为GET请求方式
@GET(""):详细路径
@POST:声明为POST请求方式
@POST(“”):详细路径
@HTTP:声明为自定义请求方式
标记注解
@FormUrlEncoding:对post请求,声明请求体为表单
@Multipart:对post请求,声明请求体为多类型
@Streaming:对post请求,声明请求体为流
参数注解
@Query:对get请求:设置接受的参数名
@Field:对post请求:设置接受的参数名
@QueryMap:对get请求:设置接受参数为Map
@FieldMap:对post请求:设置接受参数为Map
@Part:对post请求:设置上次的文件
@POST("post")
@Multipart
Call postImage(@Part MultipartBody.Part part);
File file = new File("/storage/emulated/0/Download/3d676673e48d48f0821c741699650da7.jpeg");
RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"),file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file","",requestBody);
Retrofit retrofit = new Retrofit.Builder().baseUrl("xx").build();
HttpbinService4 httpbinService4 = retrofit.create(HttpbinService4.class);
Call responseBodyCall = httpbinService4.postImage(part);
responseBodyCall.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
// 多文件 @POST("post") @Multipart CallpostImages(@Part List partList);
其他注解
@Path
@Header:加入请求头
@Headers:在方式上写死请求头
@Headers({"os:Android","version:1.0"})
@POST("post")
@FormUrlEncoded
Call postHeaders();
@Url:无视baseUrl,根据此地址直接访问
方法
(Retrofit)
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build();
返回值类型:Retrofit
返回值作用:生成Retrofit对象
作用:根据基本url,生成Retrofit对象
Retrofit retrofit.create(HttpbinService.class);
参数:
HttpbinService.class 是请求接口对象
返回值:HttpbinService 接口对象
返回值意义:获取请求接口对象
作用:获取请求接口对象,调用请求接口定义的方法
使用步骤
1. 生成请求接口 service:定义请求方式,请求体类型,接受参数名
2. 生成Retrofit对象,将请求接口传入
3. 调用生成接口对象中的方法,传参数值,enquqe获取响应值
使用
// 1. 生成请求接口定义,方式,请求体,参数名 public interface HttpbinService3 { // 设置请求方式,请求体类型,表单 @POST("post") @FormUrlEncoded Callpost(@Field("userName")String userName,@Field("password")String password); } // 2. 生成retrofit对象,传入接口,调用接口对象定义方法 Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build(); HttpbinService3 httpbinService3 = retrofit.create(HttpbinService3.class); httpbinService3.post("lance","123").enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { try { Log.i(TAG, "onResponse: "+response.body().string()); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(Call call, Throwable t) { } });
转换器
Retrofit可以直接在build后转换
public void post5(){ Retrofit retrofit = new Retrofit.Builder(). baseUrl("https://www.wanandroid.com/"). addConverterFactory(GsonConverterFactory.create()). build(); WanAndroidService2 wanAndroidService2 = retrofit.create(WanAndroidService2.class); wanAndroidService2.login("lanceedu","123123").enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { Log.i(TAG, "onResponse: "+response); } @Override public void onFailure(Call call, Throwable t) { } }); }