retrofic-请求

本文详细介绍了Retrofit的多种参数传递方式,包括路径参数、请求体、查询条件、Map参数、表单编码数据以及上传图片。同时,还提到了头信息的设置,包括固定头和动态头,并提及了OkHttp、Gson和Fastjson在数据解析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 将参数作为请求接口地址,拼接到请求地址里

@GET(“group/{id}/users”)

Call<UserInfo> userInfo(@Path("id) int userId)

2. body(相当于多个field)

@POST("users/new")
Call<User> createUser(@Body User user);

使用:RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonStr);

3. 查询条件(问号后面的参数)

@GET("group/users")
Call<List<User>> groupList(@Query("sort") String sort);

4. 复杂的查询可以使用map(相当于多个query)

 @QueryMap Map<String, String> options

5. 发送表单编码数据(用于post请求,提交单个数据)

声明: @FormUrlEncoded

使用:@Field("last_name") String last

6. 上传图片

申明:@Multipart

RequestBody requestFile = RequestBody.create(MediaType.parse(Constant.MULTIPART_FORM_DATA), file); MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);//headimg

@Part("photo") RequestBody photo 
@Part MultipartBody.Part file

7. 添加头信息

固定头信息

@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

动态添加头信息

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
@GET("user")
Call<User> getUser(@HeaderMap Map<String, String> headers)

简单的使用demo:

需要jar包含:

okHttp:retrofit底层使用的就是okHttp

converter-gson:将网络返回数据转化为一个对象

fastjosn和gson打印数据实现数据解析

private fun retrofitMethod() {
    var loggingInterceptor = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { message ->
        Log.i("return====", message)//打印返回信息
    })
    var client: OkHttpClient.Builder = OkHttpClient.Builder()
    client.addInterceptor(loggingInterceptor)

    var retrofit = Retrofit.Builder()
    retrofit.baseUrl("请求地址")
    retrofit.client(client.build())
    retrofit.addConverterFactory(GsonConverterFactory.create())//转化为对象,否则返回的是一个RequestBody

    var kotlinInter: KotlinInter = retrofit.build().create(KotlinInter::class.java)
    var call: Call<BaseResponse<VersionResponse>> = kotlinInter.getVersion()
    call.enqueue(object : Callback<BaseResponse<VersionResponse>> {
        override fun onResponse(call: Call<BaseResponse<VersionResponse>>, response: Response<BaseResponse<VersionResponse>>) {
            Log.e("response===", response.body().returndata.toString())
        }

        override fun onFailure(call: Call<BaseResponse<VersionResponse>>, throwable: Throwable) {
            Log.e("response===", throwable.message)
        }
    })
}

KotlinInter接口

@GET("url")
abstract fun getVersion(): Call<BaseResponse<VersionResponse>>

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值