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
我编译时报错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
    }
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin是一种基于JVM的静态类型编程语言,可以与Java无缝地进行交互。Retrofit是一个用于构建网络请求框架的库,结合使用KotlinRetrofit可以更加高效地开发网络应用。 使用KotlinRetrofit搭建网络框架的步骤包括: 1. 添加依赖:首先需要在项目中添加KotlinRetrofit的依赖。在项目的build.gradle文件中,添加以下依赖: ```kotlin implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.x.x' // Kotlin标准库依赖 implementation 'com.squareup.retrofit2:retrofit:2.x.x' // Retrofit依赖 ``` 2. 创建API接口:使用Kotlin创建一个包含网络请求接口方法的API接口。在这里可以定义各种需要的请求方式(GET、POST等),以及请求参数和返回数据的定义。例如: ```kotlin interface ApiService { @GET("path/to/api") suspend fun getData(): Response<Data> } ``` 3. 创建Retrofit实例使用Retrofit的Builder模式创建一个Retrofit实例,并进行必要的配置,如baseUrl、Gson解析器等。例如: ```kotlin val retrofit = Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build() ``` 4. 创建API服务实例使用刚才创建的Retrofit实例,调用create()方法创建一个API服务实例。例如: ```kotlin val apiService = retrofit.create(ApiService::class.java) ``` 5. 发起网络请求:使用API服务实例来发起网络请求,可以通过调用接口方法来发起对应的网络请求。例如: ```kotlin CoroutineScope(Dispatchers.IO).launch { try { val response = apiService.getData() if (response.isSuccessful) { val data = response.body() // 在这里处理返回的数据 } else { // 网络请求失败 } } catch (e: Exception) { // 发生异常 } } ``` 通过以上步骤,我们就可以使用KotlinRetrofit搭建一个简单的网络框架,实现网络请求的发送和数据的解析。Kotlin的语法简洁且易于理解,Retrofit提供了方便的API接口定义和网络请求的封装,这让我们能够更加高效地进行网络开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值