Issue
I'm trying to toast "No user saved" when the login button is clicked and the SharedPreferences has nothing saved in it. But when I use this code, it always proceeds to the else statement even if SharedPreferences is empty:
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
SharedPreferences preferences = getSharedPreferences("MY_PREFS", MODE_PRIVATE);
if (preferences == null){
Toast.makeText(MainActivity.this, "No user saved", Toast.LENGTH_SHORT).show();}
MY_PREFS.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map />
Is there a better way to write the if-statement?
Solution
when you obtain SharedPreferences
instance app will create empty file, so it will always exists and won't be null
, as you may call then edit()
and put some initial data in it. But before modifying this file you can check which keys are already inside
Map<String, ?> storedValues = preferences.getAll();
int numberOfStoredValues = storedValues.size();
numberOfStoredValues
will be obviusly 0
when there is nothing stored in it (yet). so your if
should look like below
if (preferences.getAll().size() == 0)
Toast.makeText(MainActivity.this, "No user saved", Toast.LENGTH_SHORT).show();
note that you can also check that some particular key already exists in these preferences, e.g. login is stored
if (preferences.contains(KEY_LOGIN))
Answered By - snachmsm
Answer Checked By - Timothy Miller (JavaFixing Admin)