Retrofit--网络请求框架

一、什么是Retrofit

Retrofit是Adnroid常用的一种网络请求框架,他是一个基于OkHttp网络请求的封装了网络请求接口的框架

二、Retrofit的基本使用

1.需要添加Retrofit和OkHttp的依赖
2.添加对应的网络请求权限
3.创建接受服务器返回数据的类(类文件)
4.创建用于描述的网络接口
5.创建Retrofit对象
6.创建网络请求接口的实例
7.发送网络请求
8.接收并处理返回数据

三、网络请求的一些方法以及参数设置

3.1 接口常见形式:

@Get

public interface XXXX {
    @GET("XXXX") Call<ResponseBody> getCall();
}
//XXX是url后面是根据前后端通信url具体定义的参数形式

@POST

public interface PostRequestGridPageTaskList {
    @Headers({"Content-Type: application/json","Accept: application/json"})
    @POST("XXXXX{id}")
    Call<ResponseBody> getCall(@Path("id") int id);
}
// {id} 表示是一个变量
// headers里的是一个具体的头形式

3.2 上传格式:

@FromUrlEncoded

每个键值对需要用@Filed来注解键名;

@Multipart

适用于有文件上传的场景,每个键值对需要用@Part来注解键名;

@Path

适用于url地址参数需要变化的场景

 @POST("/form")
        @FormUrlEncoded
        Call<ResponseBody> XXX(@Field("name") String name, @Field("age") int age);

//

@POST("/form")
        @Multipart
        Call<ResponseBody> XXX(@Part("name") RequestBody name, @Part("age") RequestBody age, 
                                           @Part MultipartBody.Part file);

//

 @GET("users/{user}")
        Call<ResponseBody>  getBlog(@Path("user") String user );
        // 访问的API是:https://XXXX/user/{user}// 在发起请求时, {user} 会被替换为方法的第一个参数 user(被@Path注解作用)
    }

四、Retrofit创建实例

//创建retrofit对象
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fanyi.youdao.com/") 
// 设置网络请求的Url地址
                .addConverterFactory(GsonConverterFactory.create()) 
// 设置数据解析器 一般用GJson
                .build();
//创建接口XXX的实例
XXX request = retrofit.create(XXX.class);
//对发送请求进行封装 XXX是接口中定义好的responseBody
Call<ResponseBody> call = request.XXX();
//发送网络请求(异步)
        call.enqueue(new Callback<Translation>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                //处理返回的数据结果
                response.body().show();
            }

            //请求失败时回调
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });
    }

 

posted on 2022-05-25 16:42  suanningmeng98  阅读(139)  评论(0编辑  收藏  举报