android - 为什么在使用SavedStateHandle之后我的数据仍然无法保存?

标签 android kotlin androidx

我正在编写一个存储值的应用程序,该值被用户杀死。它存储在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

These values will persist after the process is killed by the system and remain available via the same object.


不会在用户终止应用程序之后。
您可以将数据存储在SharedPreference或本地数据库中

关于android - 为什么在使用SavedStateHandle之后我的数据仍然无法保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63931757/

相关文章:

kotlin - 限制 Kotlin 中伴随对象的类型

java - Kotlin 是否支持 AIDL?

android - 改版本为Androidx后,并没有变成mqtt connect

android - Android Studio 中的 "Safe Delete"是什么?

android - 如何检查TCP套接字是否在Android应用程序中连接

java - 如何等待 requestLocationUpdates() 回调 Intent 完成?

generics - 在一种情况下将 Kotlin 泛型限制为不为 null

android - 如何使用 Context.getSystemService(Class) 在 Kotlin 中获取实例

androidx - 在 Android 10/Android Q 上使用捆绑的 ttf 字体时发生崩溃

android - 在 Phonegap android 中,恢复出厂设置时 UUID 是否会更改