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
    Call postImages(@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
    Call post(@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) {

            }
        });
    }