如何解决Android LiveData空指针异常
我有以下ViewModel:
class FundamentalsViewModel: ViewModel() {
var fundamentalsLiveData = MutableLiveData<WrappedResult<DataResponse>>()
private val repository = FundamentalsRespository()
private var job: Job? = null
fun getData(type: String) {
if(job == null || job?.isActive == false) {
fundamentalsLiveData.value = WrappedResult.Loading
job = viewModelScope.launch(Dispatchers.IO) {
try {
val response = repository.getData(type)
withContext(Dispatchers.Main) {
fundamentalsLiveData.value = WrappedResult.Success(response)
}
} catch(e: Exception) {
withContext(Dispatchers.Main) {
fundamentalsLiveData.value = WrappedResult.Failure(e)
}
}
}
}
}
}
一切在公司内部都能正常运行,但是在现场,我收到Crashylitics的报告说: “致命异常:java.lang.NullPointerException 指定为非null的参数为null:方法kotlin.j0.d.u.p,参数符号为“ 在这样的行上:
fundamentalsLiveData.value = WrappedResult.Loading
崩溃日志中没有其他信息。这里怎么有NPE? WrappedResult是典型的Kotlin密封类,如下所示:
sealed class WrappedResult<out T> {
data class Success<out T: Any>(val data:T) : WrappedResult<T>()
data class Failure(val error: Throwable) : WrappedResult<Nothing>()
data class CallFailure(val error: String) : WrappedResult<Nothing>()
object Loading : WrappedResult<Nothing>()
}
解决方法
我发现了问题,这与具有setRetainInstance(false)的片段有关。如果活动由于一项任务而被杀死,那么这种情况又会再次发生。自从使用片段范围创建视图模型以来,我还无法完全理解为什么会发生这种情况,但是停止更改为setRetainInstance(true)崩溃。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。