为何Gson/Json存储加载在API35模拟器正常,低API真机/模拟器失效?
我开发了一款待办清单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
相关产品推荐
相关产品推荐

