我有一个奇怪的问题,看起来像一个简单的应用程序创建(一个总是在寻找麻烦的想法)。
应用程序基本上以MainActivity
开头,用户用来“登录”应用程序。如果成功MainActivity
使用ItemzList
转到下一个活动startActivity
。这一切都运行良好,一旦ItemzList
启动,它会使用ListView
中的字符串列表填充其SharedPreferences
。
再次这很好用。但是,如果您按下“主页”按钮,然后重新启动应用程序,当ItemzList
从SharedPreferences
加载列表时,列表突然变空(我已通过调试器和我的确认装置)。
我知道它与缓存的应用程序有关,因为如果我'强制停止'应用程序,然后重新启动列表再次工作。
我是否错误地访问了共享偏好设置?
SharedPreferences settings = getSharedPreferences("MAIN", MODE_PRIVATE);
Set<String> tempSet = settings.getStringSet("LIST", new HashSet<String>());
答案 0 :(得分:0)
发现错误。我处理了Set tempSet然后清除了tempSet(无法回想起那个背后的推理)。
SharedPreferences settings = getSharedPreferences("MAIN", MODE_PRIVATE);
Set<String> tempSet = settings.getStringSet("LIST", new HashSet<String>());
ArrayList<String> stringsEnc = new ArrayList<String>(tempSet);
tempSet.clear(); //This is the erroneous line
我想清除'tempSet'有些如何清除sharedPreferences对象中的列表(但不是XML文件本身),所以如果应用程序被缓存,下一次调用'getSharedPreferences'只会重用缓存版本(具有清除列表?)无论如何删除该行修复了问题。
答案 1 :(得分:0)
最后我找到了一个解决方案,只需将你的prefs代码放在异步任务中就可以了,我不知道为什么会这样,但是它会起作用。
s2 + s1
prefss = getSharedPreferences(ACCOUNT_PREFS_NAME, MODE_MULTI_PROCESS);
new AsyncSave(favNamesList).execute();