Android 错误:java.lang.RuntimeException:Parcelable在写入可序列化对象时遇到IOException
我创建了一个ViewModel,并在不同的类中使用该ViewModel,一切正常,但每次我将应用程序置于后台时,都会出现以下错误: java.lang.RuntimeException:Parcelable在编写可序列化对象时遇到IOException(name=com.citylinemobile.viewmodels.ChartsViewModel) 我检查了关于这个主题的不同主题,但在每个主题中,解决方案都是在该类中实现可序列化接口,但我已经这样做了,仍然存在问题。这是我的ViewModel类:Android 错误:java.lang.RuntimeException:Parcelable在写入可序列化对象时遇到IOException,android,kotlin,viewmodel,runtimeexception,serializable,Android,Kotlin,Viewmodel,Runtimeexception,Serializable,我创建了一个ViewModel,并在不同的类中使用该ViewModel,一切正常,但每次我将应用程序置于后台时,都会出现以下错误: java.lang.RuntimeException:Parcelable在编写可序列化对象时遇到IOException(name=com.citylinemobile.viewmodels.ChartsViewModel) 我检查了关于这个主题的不同主题,但在每个主题中,解决方案都是在该类中实现可序列化接口,但我已经这样做了,仍然存在问题。这是我的ViewMode
class ChartsViewModel(guid: String) : ViewModel(), Serializable {
var cashCollection: MutableLiveData<MutableList<CashCollection.CashCollectionItem>> = MutableLiveData()
var financialDetails = MutableLiveData<MutableList<FinancialDetails.FinancialDetailsItem>>()
var ticketsDetails: MutableLiveData<MutableList<TicketDetails>> = MutableLiveData()
var stats: MutableLiveData<StatsModel.Stats> = MutableLiveData()
private var chartsRepo: ChartsRepository = ChartsRepository(ChartsWebService())
init {
cashCollection = chartsRepo.getCashCollection(guid)
Log.i("TEST", "INIT Cash: $cashCollection")
financialDetails = chartsRepo.getFinancialDetails(guid)
Log.i("TEST", "INIT Financial: $financialDetails")
ticketsDetails = chartsRepo.getTicketsDetails(guid)
Log.i("TEST", "INIT Tickets: $ticketsDetails")
stats = chartsRepo.getStatus(guid)
Log.i("TEST", "INIT Status: $stats")
}
fun getCashCollectionData(guid: String): MutableLiveData<MutableList<CashCollection.CashCollectionItem>> {
cashCollection.value?.clear()
cashCollection = chartsRepo.getCashCollection(guid)
Log.i("TEST", "This: " + guid + " Get CashCollection :" + cashCollection.value.toString())
return cashCollection
}
fun getFinancialDetails(guid: String): MutableLiveData<MutableList<FinancialDetails.FinancialDetailsItem>> {
financialDetails.value?.clear()
financialDetails = chartsRepo.getFinancialDetails(guid)
Log.i("TEST", "This: " + guid + " Get Financial :" + financialDetails.value.toString())
return financialDetails
}
fun getTicketsDetails(guid: String): MutableLiveData<MutableList<TicketDetails>> {
ticketsDetails.value?.clear()
ticketsDetails = chartsRepo.getTicketsDetails(guid)
Log.i("TEST", "This: " + guid + " Get Tickets :" + ticketsDetails.value.toString())
return ticketsDetails
}
fun getStatusData(guid: String): MutableLiveData<StatsModel.Stats> {
stats = chartsRepo.getStatus(guid)
Log.i("TEST", "This: $guid Get Status :${stats.value.toString()}")
return stats
}
类ChartsViewModel(guid:String):ViewModel(),可序列化{
var cashCollection:MutableLiveData=MutableLiveData()
var financialDetails=MutableLiveData()
var ticketsDetails:MutableLiveData=MutableLiveData()
var stats:MutableLiveData=MutableLiveData()
私有var chartsRepo:ChartsRepository=ChartsRepository(ChartsWebService())
初始化{
cashCollection=chartsRepo.getCashCollection(guid)
Log.i(“测试”,“初始现金:$cashCollection”)
financialDetails=chartsRepo.getFinancialDetails(guid)
Log.i(“测试”,“初始财务:$financialDetails”)
ticketsDetails=chartsRepo.getTicketsDetails(guid)
Log.i(“测试”,“初始票据:$ticketsDetails”)
stats=chartsRepo.getStatus(guid)
Log.i(“测试”,“初始状态:$stats”)
}
fun getCashCollectionData(guid:String):可变LiveData{
cashCollection.value?.clear()
cashCollection=chartsRepo.getCashCollection(guid)
Log.i(“TEST”,“This:”+guid+“Get CashCollection:”+CashCollection.value.toString())
回款
}
趣味getFinancialDetails(guid:String):可变LiveData{
financialDetails.value?.clear()
financialDetails=chartsRepo.getFinancialDetails(guid)
Log.i(“TEST”,“This:”+guid+“Get Financial:”+financialDetails.value.toString())
返回财务详细信息
}
趣味getTicketsDetails(guid:String):可变LiveData{
ticketsDetails.value?.clear()
ticketsDetails=chartsRepo.getTicketsDetails(guid)
Log.i(“测试”,“此:”+guid+“获取票证:”+ticketsDetails.value.toString())
退票详情
}
fun getStatusData(guid:字符串):MutableLiveData{
stats=chartsRepo.getStatus(guid)
Log.i(“TEST”,“This:$guid Get Status:${stats.value.toString()}”)
返回数据
}
我还使用了ViewModelFactory:
class ChartsViewModelFactory(var guid: String) : ViewModelProvider.Factory, Serializable {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(ChartsViewModel::class.java)) {
return ChartsViewModel(guid) as T
} else {
throw RuntimeException("Failed to create instance of the ${modelClass.simpleName}")
}
}
class ChartsViewModelFactory(变量guid:String):ViewModelProvider.Factory,可序列化{
重写趣味创建(modelClass:Class):T{
if(modelClass.isAssignableFrom(ChartsViewModel::class.java)){
将ChartsViewModel(guid)返回为T
}否则{
抛出RuntimeException(“未能创建${modelClass.simpleName}的实例”)
}
}
如有任何建议,将不胜感激!谢谢