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] } }