📜  在 Android 中使用 Kotlin 协程进行改造

📅  最后修改于: 2022-05-13 01:55:11.295000             🧑  作者: Mango

在 Android 中使用 Kotlin 协程进行改造

Kotlin 团队将协程定义为“轻量级线程”。它们是实际线程可以执行的任务。协程是在 1.3 版中添加到 Kotlin 的,并且基于其他语言的既定概念。 Kotlin 协程引入了一种新的并发风格,可以在 Android 上使用以简化异步代码。在本文中,我们将学习使用 Kotlin 协程进行改造。所以我们将使用 Retrofit 来处理网络请求。 Retrofit 是一个非常流行的库,用于工作 API,也非常常用。我们将通过使用 API 制作一个简单的应用程序来学习它,以使用 Retrofit 获取一些数据。

分步实施

第 1 步:创建一个新项目

要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。

第二步:添加依赖

导航到Gradle Scripts > build.gradle(Module:app)并在依赖项部分添加以下依赖项。

我们正在使用 GSON 将 JSON 转换为 kotlin(Java) 对象。我们将在项目的 build.gradle 文件中添加这些依赖项。

第 3 步:我们将使用以下 API

图 01

所以我们的 JSON 响应将如下图 01 所示。

第 4 步:然后我们将根据 JSON 响应创建数据类

在 JSON 响应中,我们有 2 个 JSON 对象,所以我们将创建 2 个数据类

  1. 报价单
  2. 结果
Kotlin
// data class QuoteList 
// according to JSON response
package com.ayush.retrofitexample
  
data class QuoteList(
    val count: Int,
    val lastItemIndex: Int,
    val page: Int,
    val results: List,
    val totalCount: Int,
    val totalPages: Int
)


Kotlin
package com.ayush.retrofitexample
  
data class Result(
    val _id: String,
    val author: String,
    val authorSlug: String,
    val content: String,
    val dateAdded: String,
    val dateModified: String,
    val length: Int,
    val tags: List
)


Kotlin
// Retrofit interface
package com.ayush.retrofitexample
  
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Query
  
interface QuotesApi {
    @GET("/quotes")
    suspend fun getQuotes() : Response
}


Kotlin
package com.ayush.retrofitexample
  
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
  
object RetrofitHelper {
  
    val baseUrl = "https://quotable.io/"
  
    fun getInstance(): Retrofit {
        return Retrofit.Builder().baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create()) 
            // we need to add converter factory to 
            // convert JSON object to Java object
            .build()
    }
}


Kotlin
package com.ayush.retrofitexample
  
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import retrofit2.create
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        val quotesApi = RetrofitHelper.getInstance().create(QuotesApi::class.java)
        // launching a new coroutine
        GlobalScope.launch {
          val result = quotesApi.getQuotes()
            if (result != null)
                // Checking the results
                Log.d("ayush: ", result.body().toString())
        }
  
    }
}


第二类数据

科特林

package com.ayush.retrofitexample
  
data class Result(
    val _id: String,
    val author: String,
    val authorSlug: String,
    val content: String,
    val dateAdded: String,
    val dateModified: String,
    val length: Int,
    val tags: List
)

第 5 步:我们将创建一个 Retrofit 接口来添加 URL 的端点(在我们的例子中,引号是端点)

科特林

// Retrofit interface
package com.ayush.retrofitexample
  
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Query
  
interface QuotesApi {
    @GET("/quotes")
    suspend fun getQuotes() : Response
}

第 6 步:我们将创建一个新文件来获取 Retrofit 对象

在这个文件中,我们将有一个返回 Retrofit 对象的函数。

科特林

package com.ayush.retrofitexample
  
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
  
object RetrofitHelper {
  
    val baseUrl = "https://quotable.io/"
  
    fun getInstance(): Retrofit {
        return Retrofit.Builder().baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create()) 
            // we need to add converter factory to 
            // convert JSON object to Java object
            .build()
    }
}

第 7 步:现在我们将在 MainActivity 中链接 Retrofit 对象和 Retrofit 接口文件

科特林

package com.ayush.retrofitexample
  
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import retrofit2.create
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        val quotesApi = RetrofitHelper.getInstance().create(QuotesApi::class.java)
        // launching a new coroutine
        GlobalScope.launch {
          val result = quotesApi.getQuotes()
            if (result != null)
                // Checking the results
                Log.d("ayush: ", result.body().toString())
        }
  
    }
}

第 8 步:在清单文件中添加 Internet 权限

结果:我们可以查看logcat窗口。我们可以在绿色框中看到结果。

输出: