retrofit

app下的build.gradle

1
2
3
// Retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")

RetrofitUtil(class)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.coroutine.api

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object RetrofitUtil {
  private const val BASE_URL =
    "https://mock.apipost.cn/app/mock/project/ced69cf2-9206-4a42-895e-dd7442a888df/"
  private val retrofit = Retrofit.Builder()
    .addConverterFactory(GsonConverterFactory.create())
    .baseUrl(BASE_URL)
    .build()

  fun <T> createService(clazz: Class<T>):T {
    return retrofit.create(clazz)
  }
}

ArticleApi.kt包含Item與List的data class(data class自動有setter與getter功能)。
interface ArticleApi 包含companion object,retrofit變數會初始化網路傳輸的api。
注意以下article前面無右斜線。

@GET("article/list")

ArticleApi.kt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.coroutine.api

import retrofit2.http.GET

data class ArticleItem(val title: String, val source: String, val time: String)

data class ArticleList(val data: List<ArticleItem>, val code: Int = -1, val message: String)

interface ArticleApi {
  @GET("article/list")
  suspend fun articleList(): ArticleList
  companion object {
    val retrofit: ArticleApi by lazy {
      RetrofitUtil.createService(ArticleApi::class.java)
    }
  }
}

呼叫ArticleApi.retrofit.articleList()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class MainActivity07 : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val submit = findViewById<Button>(R.id.button)
    val textv = findViewById<TextView>(R.id.textView)
    submit.setOnClickListener {
      GlobalScope.launch(Dispatchers.Main) {
        val listResult = withContext(Dispatchers.IO) {
          ArticleApi.retrofit.articleList()
        }
        textv.text = listResult.toString()
      }
    }
  }
}

results matching ""

    No results matching ""