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

SharedPreferences空存储时始终非空,如何正确编写判断语句?

修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:05:37