这是对应的 GitHub 页面网址:https://github.com/square/retrofit
那首先,我们就是需要添加Retrofit 的第三方库依赖项。
Android Gradle 允许将外部库添加到项目中。除了库依赖项之外,还需要添加托管库的代码库。
build.gradle.kts (Module :app)。dependencies 部分,为 Retrofit 库添加以下几行代码:// Retrofitimplementation("com.squareup.retrofit2:retrofit:2.9.0")// Retrofit with Scalar Converterimplementation("com.squareup.retrofit2:converter-scalars:2.9.0")

String 返回。JSON 是一种在客户端和服务器之间存储和传输数据的格式。我们将在后面的部分中介绍 JSON。

MarsApiService。

network/MarsApiService.kt。import retrofit2.Retrofitimport retrofit2.converter.scalars.ScalarsConverterFactory
private const val BASE_URL = "https://jsonplaceholder.typicode.com"private val retrofit = Retrofit.Builder() //创建 Retrofit 对象.addConverterFactory(ScalarsConverterFactory.create()) //使用 ScalarsConverterFactory 实例对构建器调用 addConverterFactory()。.baseUrl(BASE_URL)// Web 服务添加基础网址。.build()//创建 Retrofit 对象。
MarsApiService 的接口,该接口定义 Retrofit 如何使用 HTTP 请求与网络服务器通信。向 MarsApiService 接口添加一个名为 getPhotos() 的函数,以从 Web 服务中获取响应字符串。将函数的返回值类型添加到 String。import retrofit2.http.GETinterface MarsApiService {@GET("photos")suspend fungetPhotos(): String //从 Web 服务中获取响应字符串,suspend是设置为挂起函数,使其异步,并且不会阻塞发起调用的线程}
getPhotos() 方法时,Retrofit 会将端点 photos 附加到您用于启动请求的基准网址(在 Retrofit 构建器中定义)。本文中访问的完整地址就是:https://jsonplaceholder.typicode.com/photos (大家可以自己看下这个链接的效果)。@GET 注解告知 Retrofit 这是 GET 请求,并为该 Web 服务方法指定端点。在这种情况下,端点为 photos。意思是将在此 Codelab 中使用 /photos 端点。MarsApiService 接口声明外,定义一个名为 MarsApi 的公共对象,以初始化 Retrofit 服务。(此对象是应用的其余部分可以访问的公开单例对象。)object MarsApi {val retrofitService : MarsApiService by lazy { //延迟初始化的 Retrofit 对象属性(延迟初始化,确保其在首次使用时进行初始化)retrofit.create(MarsApiService::class.java)//使用带有 MarsApiService 界面的 retrofit.create() 方法初始化 retrofitService 变量。}}
network/MarsApiServiceMarsViewModel

import androidx.lifecycle.ViewModelclassMarsViewModel: ViewModel() { }
package com.example.photoalbumimport androidx.lifecycle.ViewModelimport com.example.photoalbum.network.MarsApiimport androidx.lifecycle.viewModelScopeimport kotlinx.coroutines.flow.MutableStateFlowimport kotlinx.coroutines.flow.StateFlowimport kotlinx.coroutines.launchclass MarsViewModel: ViewModel() {//最近的网络请求的状态// 私有可变状态,内部修改private val _marsUiState = MutableStateFlow("加载中...")//MutableStateFlow 是 ViewModel 专用的可观察可变状态容器,属于 Kotlin 协程 Flow 体系,专门用来存放页面 UI 数据。// 对外只读状态,UI只能读取不能修改val marsUiState: StateFlow<String> = _marsUiStateinit {getMarsPhotos()}private fungetMarsPhotos() {viewModelScope.launch { //使用异步执行发出 Web 服务请求try {val listResult = MarsApi.retrofitService.getPhotos()//使用单例对象 MarsApi 从 retrofitService 接口调用 getPhotos() 方法。将返回的响应保存在名为 listResult 的 val 中。_marsUiState.value = listResult} catch (e: Exception) {_marsUiState.value = "请求失败:${e.message}"}}}}
AndroidManifest.xml,<application> 标签上方添加:<uses-permissionandroid:name="android.permission.INTERNET" />
private val marsViewModel: MarsViewModel byviewModels ()

Text(text = jsonText,modifier = Modifier.padding(top = 20.dp),fontSize = 12.sp)

