KotlinはRetrofit2の簡単な例を使用しています

結果を示す

ここに画像の説明を挿入

インターフェースの紹介

インターフェース:携帯電話番号属性クエリ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
    }
}

おすすめ

転載: blog.csdn.net/qq_44972847/article/details/107103126