1,创建ViewModel类
//MainViewModel.kt
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.example.myapplication.entity.Banner
import com.example.myapplication.network.BaseResponse
import com.example.myapplication.network.NetworkUtil
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
class MainViewModel : ViewModel() {
private val _errorLiveData: MutableLiveData<String> = MutableLiveData()
val errorLiveData: LiveData<String> = _errorLiveData
private val _bannerLiveData = MutableLiveData<List<Banner>>()
val bannerLiveData:LiveData<List<Banner>> = _bannerLiveData
fun getBanners(){
NetworkUtil.wanAndroidApi.getBanners()
.enqueue(object : Callback<BaseResponse<List<Banner>>> {
override fun onResponse(
call: Call<BaseResponse<List<Banner>>>,
response: Response<BaseResponse<List<Banner>>>
) {
_bannerLiveData.value=response.body()?.data
}
override fun onFailure(
call: Call<BaseResponse<List<Banner>>>,
t: Throwable
) {
_errorLiveData.value = t.message.toString()
}
})
}
}
2,引用ViewModel
//MainActivity.kt
class MainActivity : ComponentActivity() {
private lateinit var mViewModel:MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Column(Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally) {
var textState by rememberSaveable { mutableStateOf("Initial Text")}
mViewModel.bannerLiveData.observe(this@MainActivity){
textState = it.toString() }
Button(onClick = { mViewModel.getBanners() }) {
Text(text = "获取网络信息") }
Text(text = textState)
}
}
mViewModel = ViewModelProvider(this)[MainViewModel::class.java]
}
}