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()
}
}
}
}