You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Gson/Json存储加载在API35模拟器正常,低API真机/模拟器失效?

待办清单App跨API版本SharedPreferences数据存储问题

我开发了一款待办清单App,用于存储若干列表数据。在Android Studio的中型手机API 35模拟器上,数据的保存与加载功能正常,但在API 34真机或API 21 Pixel模拟器上(设备API版本均低于35),数据无法保存或加载。App不会崩溃,但列表无法填充,推测数据未完成存储。

保存数据代码

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()方法,但无法确定问题出在SharedPreferences、权限还是其他方面,不知如何调试。

补充说明:单例的getter方法仅返回跨App使用的字符串列表。


内容的提问来源于stack exchange,提问作者Maysey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:13:16