目次
結果を示す
インターフェースの紹介
インターフェース:携帯電話番号属性クエリ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
コンパイル時にエラーを報告しましたエラー:Invoke-customsはAndroid O以降でのみサポートされています(–min-api 26)
理由:コードがJava8をサポートするように設定されていません
解決策:アプリのbuild.gradleに次のコードを追加します
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}