为什么我的数据在使用 SavedStateHandle 后没有保留?
Why isn't my data persisting after using SavedStateHandle?
我正在编写一个应用程序,在它被用户杀死后存储一个值。它存储在 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()
}
}
我的代码中的大部分功能都被省略了,但包含了 savedState 部分。有没有我做错或误解的地方?
编辑:
我现在明白 SavedStateHandle
只有在系统终止进程时才会存在。除了使用 SavedStateHandle
,是否有任何其他数据类型或技术可用于在用户关闭应用程序后保存数据?
根据官方 doc 于 SavedStateHandle
These values will persist after the process is killed by the system
and remain available via the same object.
不是在用户终止应用后。
您可以将数据存储在 SharedPreference
或本地数据库中
我正在编写一个应用程序,在它被用户杀死后存储一个值。它存储在 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()
}
}
我的代码中的大部分功能都被省略了,但包含了 savedState 部分。有没有我做错或误解的地方?
编辑:
我现在明白 SavedStateHandle
只有在系统终止进程时才会存在。除了使用 SavedStateHandle
,是否有任何其他数据类型或技术可用于在用户关闭应用程序后保存数据?
根据官方 doc 于 SavedStateHandle
These values will persist after the process is killed by the system and remain available via the same object.
不是在用户终止应用后。
您可以将数据存储在 SharedPreference
或本地数据库中