为什么我的GSON / JSON保存 /加载实现在API 35中型手机上工作,但无法使用真实手机或模拟真实手机?

问题描述 投票:0回答:0

我有一个应用程序,可以节省少数列表供待办事项列表

在Android Studio中,数据保存和加载在“中型电话API 35”型仿真器上,这些模拟器只是手机的原型。

但在我的真实手机或API 21像素模拟器上运行它,数据不能保存或加载

都比中型API 35低,我认为我的手机是API 34。该应用不会崩溃,列表不会填充,并且假设无法保存。 the代码:

save数据:

private fun saveData() { val sharedPref = getSharedPreferences(prefName,MODE_PRIVATE) val gson = Gson() val prefEditor = sharedPref.edit() //prefEditor.clear() prefEditor.putString(taskNameString, gson.toJson(gameifyInstance.GetTaskList())) prefEditor.putString(taskDescString, gson.toJson(gameifyInstance.GetTaskDescList())) prefEditor.putString(taskCostString, gson.toJson(gameifyInstance.GetTaskCostList())) prefEditor.putString(rewardNameString, gson.toJson(gameifyInstance.GetRewardList())) prefEditor.putString(rewardDescString, gson.toJson(gameifyInstance.GetRewardDescList())) prefEditor.putString(rewardCostString, gson.toJson(gameifyInstance.GetRewardCostList())) prefEditor.putString(pointTotalString, gameifyInstance.GetTotalPoints().toString()) prefEditor.commit() }

加载数据:

val sharedPref = getSharedPreferences(prefName,Context.MODE_PRIVATE)
        val gson = Gson()

        val rawTaskNameList = sharedPref.getString(taskNameString, "[]")
        val rawTaskDescList = sharedPref.getString(taskDescString, "[]")
        val rawTaskCostList = sharedPref.getString(taskCostString, "[]")
        val rawRewardNameList = sharedPref.getString(rewardNameString, "[]")
        val rawRewardDescList = sharedPref.getString(rewardDescString, "[]")
        val rawRewardCostList = sharedPref.getString(rewardCostString, "[]")
        val rawPointTotal = sharedPref.getString(pointTotalString, "0")

        val type = object : TypeToken<List<String>>(){}

        val loadedTaskNameList : List<String> = gson.fromJson(rawTaskNameList, type)
        val loadedTaskDescList : List<String> = gson.fromJson(rawTaskDescList, type)
        val loadedTaskCostList : List<String> = gson.fromJson(rawTaskCostList, type)
        val loadedRewardNameList : List<String> = gson.fromJson(rawRewardNameList, type)
        val loadedRewardDescList : List<String> = gson.fromJson(rawRewardDescList, type)
        val loadedRewardCostList : List<String> = gson.fromJson(rawRewardCostList, type)

我试图摆弄权限,当剃须共享首选项时,我尝试切换apply()和commit()。问题是我不知道在哪里调试等,以区分这是共享的偏好问题或权限问题或任何其他问题。

Edit:正如我被要求发布我的Getters一样,它们在这里: singleton
的Getters

他们只是返回我的单身人士中的字符串列表,该列表在整个应用程序上保存任务等

我已经为那些可能遇到的人弄清楚了 culprit实际上是ondestroy(),在中型手机上SharedPreferences可以很好地保存,它在另一个手机上无法正确触发。在Savedata()转移到其他地方,现在我希望更有效地优化一些东西之后,除了中型手机35之外,还可以节省其他模拟器的共享偏好 感谢您的协助

android kotlin gson sharedpreferences
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.