Retrofit网络请求框架

Retrofit结构图如下:

1、请求方法注解

    @patch请求,该请求是对get请求的补充,用于更新局部资源

    @http请求,通用注解,可以替换以上所有的注解,其拥有三个属性,method,path,hasBody

2、请求头注解

    @Headers,用于添加固定请求头,可以同时添加多个,通过该注解添加的请求头不会相互覆盖,而是共同存在

    @hHeader,作为方法的参数传入,用于添加不固定值得Header,该注解会更新已有得请求头

3、请求参数注解

    @Body,多用于post请求发送非表单数据,比如想要以post格式传递json格式数据

    @Filed、@FiledMap,多用于post请求中表单字段,Filed和FiledMap需要FormUrlEncoded结合使用

    @Part、@PartMap,用于表单字段,Part和PartMap与Multipart注解结合使用,适合文件上传得情况

    @path,用于url中得占位符

    @Query、@QueryMap,用于Get中指定参数

    @Url,指定请求路径

4、请求和响应格式注解

    @FormUrlEncoded,表示请求发送编码表单数据,每个键值对需要使用@Field注解

    @Multipart,便是请求发送multipart数据,需要配合使用@Part

    @Streaming,表示响应用字节流得形式返回,如果没使用该注解,默认会把数据全部载入到内存中,该注解在在下载大文件得时候特别有用

5、使用

    5.1、添加依赖:

        /*retrofit*/

        implementation 'com.squareup.retrofit2:retrofit:2.9.0'

        implementation 'com.squareup.retrofit2:converter-gson:2.9.0'//json转换

    5.2、定义一个静态类:

        object MyRetrofit {

                private val client = OkHttpClient.Builder() //builder构造者设计模式

                        .connectTimeout(10, TimeUnit.SECONDS) //连接超时时间                                                        .readTimeout(10,TimeUnit.SECONDS) //读取超时

                        .writeTimeout(10,TimeUnit.SECONDS) //写超时,也就是请求超时

                        .build()

                private val retrofit:Retrofit = Retrofit.Builder()

                        .client(client)                 

                        .baseUrl("http://123.56.232.18:8080/serverdemo")//网络请求的域名,就是网址公用部分  

                        .addConverterFactory(GsonConverterFactory.create())//数据转换适配器

                        .build()

                /*

                * public <T> T create(final Class<T> service){

                * }

                * java写法,等同于下面

                * */

                fun <T> create(clazz : Class<T>):T{

                        return retrofit.create(clazz)

                }

        }

        interface ApiService{

                /**

                * @Query(value = "userId",encoded = true)用来修饰userId:String

                * */

                @GET(value = "user/query")//"user/query"具体的请求地址,不需要加域名

                fun  queryUser(@Query(value = "userId",encoded = true) userId:String):Call<UserResponse>

        }

    5.3、使用

        //注意:onResponse和onFailure方法都是运行在主线程中
        MyRetrofit.create(ApiService::class.java)
                .queryUser("1600932269")
                .enqueue(object : Callback<UserResponse> {
                    override fun onResponse(call: Call<UserResponse>, response:                         Response<UserResponse>) {
                        Log.e("retrofit", "onResponse: " +                         response.body()?.toString()?:"response is error" )
                    }

                    override fun onFailure(call: Call<UserResponse>, t: Throwable) {
                        Log.e("retrofit", "onFailure: " + t.message?:"unknown reason" )
                    }

                })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值