-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathMockNetActivity.kt
46 lines (43 loc) · 1.69 KB
/
MockNetActivity.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.zy.demo
import androidx.lifecycle.lifecycleScope
import com.zy.demo.databinding.ActivityMockNetBinding
import com.zy.multistatepage.MultiStateContainer
import com.zy.demo.base.BaseActivity
import com.zy.multistatepage.bindMultiState
import com.zy.multistatepage.state.ErrorState
import com.zy.demo.state.LottieWaitingState
import com.zy.multistatepage.state.SuccessState
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
import java.lang.Exception
class MockNetActivity : BaseActivity<ActivityMockNetBinding>() {
private lateinit var multiState: MultiStateContainer
override fun initPage() {
multiState = viewBinding.content.bindMultiState()
loadData()
}
private fun loadData() {
lifecycleScope.launch {
try {
multiState.show<LottieWaitingState>()
val request =
Request.Builder().url("https://wanandroid.com/wxarticle/chapters/json").build()
val okHttpClient = OkHttpClient.Builder().build()
val call = okHttpClient.newCall(request)
val response = withContext(Dispatchers.IO) { call.execute().body()?.string() }
multiState.show<SuccessState>()
viewBinding.content.text = response
} catch (e: Exception) {
e.printStackTrace()
multiState.show<ErrorState> {
it.retry { loadData() }
//可以直接设置 state 中的变量 刷新state
it.setErrorMsg(e.message.toString())
}
}
}
}
}