我正在编写一个存储值的应用程序,该值被用户杀死。它存储在ViewModel
中,并保存在onClear
函数中。我希望能够重新打开应用程序并查看保存的值,但是当我使用指定的键访问此值时,它返回为null。这是我的代码
package com.example.sharedexpenseapp
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.navigation.NavController
import com.loopj.android.http.AsyncHttpClient
import com.loopj.android.http.TextHttpResponseHandler
import cz.msebera.android.httpclient.Header
class MainActivityViewModel constructor (private val savedState: SavedStateHandle): ViewModel() {
companion object {
private const val NAME= "NAME"
}
//LiveData for HomePageFragment
private val liveName = MutableLiveData<String>(getName().value)
internal val name: LiveData<String>
get() = liveName
internal val orientation = MutableLiveData<Int>()
internal var navController: NavController? = null
//LiveData for LoginFragment
internal val liveNameEditText = MutableLiveData<String>()
internal fun saveName(name: String?) { liveName.value = name; name?.let { savedState.set(NAME, it) }}
private fun getName(): MutableLiveData<String> { return savedState.getLiveData(NAME) }
override fun onCleared() {
liveName.value?.let { saveName(it) }
super.onCleared()
}
}
我的代码中的大多数功能已被省略,但其中包含了saveState部分。我有做错或误解的事情吗?编辑:
我现在知道
SavedStateHandle
仅在系统终止进程时才保留。除了使用SavedStateHandle
之外,在用户关闭应用程序后,是否可以使用其他任何数据类型或技术来保存数据? 最佳答案
按照SavedStateHandle
上的官方doc
不会在用户终止应用程序之后。
您可以将数据存储在SharedPreference
或本地数据库中