效果展示
接口介绍
接口: 手机号码归属地查询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
}
}