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>>