SharedPreferences空存储时始终非空,如何正确编写判断语句?
你当前的判断逻辑错误的核心原因是:getSharedPreferences("MY_PREFS", MODE_PRIVATE)永远不会返回null——哪怕对应的XML文件是空的(就像你提供的<map/>),所以if (preferences == null)这个条件永远不会成立,自然不会触发Toast提示。
下面是两种可行的判断方式:
方式一:判断所有存储内容是否为空
直接获取SharedPreferences里的所有键值对,判断集合是否为空:
btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences preferences = getSharedPreferences("MY_PREFS", MODE_PRIVATE); Map<String, ?> allSavedData = preferences.getAll(); if (allSavedData.isEmpty()) { Toast.makeText(MainActivity.this, "No user saved", Toast.LENGTH_SHORT).show(); } else { // 这里写有用户数据时的登录逻辑 } } });
方式二:判断特定用户相关键是否存在
如果你存储用户信息时用了特定的键(比如"saved_username"或"user_id"),直接判断该键是否存在会更精准(避免误判其他非用户数据):
btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences preferences = getSharedPreferences("MY_PREFS", MODE_PRIVATE); // 替换成你实际存储用户信息用的键名 if (!preferences.contains("saved_username")) { Toast.makeText(MainActivity.this, "No user saved", Toast.LENGTH_SHORT).show(); } else { // 这里写有用户数据时的登录逻辑 } } });
内容的提问来源于stack exchange,提问作者jjwright
相关产品推荐
相关产品推荐

