Kotlin使用Retrofit2简单实例

    技术2023-04-06  70

    目录

    效果展示接口介绍 步骤:1. gradle添加依赖库2. 创建数据类3. 定义代理接口4.Retrofit构造器 调用最后注意

    效果展示

    接口介绍

    接口: 手机号码归属地查询API. 支持格式:JSON 请求方法:GET

    步骤:

    1. gradle添加依赖库

    dependencies { ... implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' }

    2. 创建数据类

    data class Tel(val status: String, val msg: String, val result: Result) { data class Result( val province: String, // 省 val city: String, // 市 val company: String, // 运营商 val cardtype: String // 卡类型 ) }

    3. 定义代理接口

    interface TelService { /** * @Parent: appkey: 调用的密钥 shouji: 查询的手机号 */ @GET("shouji/query") fun SerachTelByGet(@Query("appkey") appkey: String, @Query("shouji") shouji: String): Call<Tel> }

    4.Retrofit构造器

    //单例类 object ServiceCreator { private const val BASE_URL = "https://api.binstd.com" //根路径 private val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) //添加用于解析数据的转换库 .build() fun <T> create(serviceClass: Class<T>): T = retrofit.create(serviceClass) }

    调用

    package com.example.serachtel import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* import retrofit2.Call import retrofit2.Callback import retrofit2.Response class MainActivity : AppCompatActivity() { private val appkey = "注册后即可获取" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) requestGetBtn.setOnClickListener { val telNumber = inputTelEt.text.toString() //从EditText获取输入的手机号 val telService = ServiceCreator.create(TelService::class.java) //传入之前定义的接口 //Get请求并处理结果 telService.SerachTelByGet(appkey, telNumber).enqueue(object : Callback<Tel> { override fun onFailure(call: Call<Tel>, t: Throwable) { t.printStackTrace() } override fun onResponse(call: Call<Tel>, response: Response<Tel>) { val tel = response.body() if (tel != null) { infoTv.text = "${tel.result.province} ${tel.result.city}" } } }) } } }

    最后注意

    1 网络权限

    <uses-permission android:name="android.permission.INTERNET" />

    2 我编译时报错Error: Invoke-customs are only supported starting with Android O (–min-api 26) 原因:代码未设置支持Java8

    解决方法:在app的build.gradle添加如下代码

    android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
    Processed: 0.014, SQL: 9