coders1290
coders1290

Reputation: 97

shared preferences not being saved

In my activity i am updating the user interface according to the preferences stored. code for updateUI is as follows:

private void updateUI()
{
    //preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
    preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

    toggle = (Button)findViewById(R.id.toggleButton);
    incommingEdit = (Button)findViewById(R.id.IncommingEditButton);
    outgoingEdit = (Button)findViewById(R.id.outgoingEditButton);
    missedEdit = (Button)findViewById(R.id.missedEditButton);
    save = (Button)findViewById(R.id.saveButton);
    cancel = (Button)findViewById(R.id.cancelButton);
    incommingCheck = (CheckBox)findViewById(R.id.incommingCheck);
    outgoingCheck = (CheckBox)findViewById(R.id.outgoingCheck);
    missedCheck = (CheckBox)findViewById(R.id.missedCheck);
    incommingTextView = (TextView) findViewById(R.id.incommingTextView);
    outgoingTextView = (TextView) findViewById(R.id.outgoingTextView);
    missedTextView = (TextView) findViewById(R.id.missedTextView);

    //Disable all the edit buttons until their checkboxes are checked.
    incommingEdit.setEnabled(false);
    outgoingEdit.setEnabled(false);
    missedEdit.setEnabled(false);

    //Display the messages in the text views.
    incommingTextView.setText(preferences.getString("incommingMsgPhone", "Currently there are no messages saved."));
    outgoingTextView.setText(preferences.getString("outgoingMsgPhone", "Currently there are no messages saved."));
    missedTextView.setText(preferences.getString("missedMsgPhone", "Currently there are no messages saved."));

    //Check the check boxes.
    if(preferences.getInt("incommingPhone", 0) == Calls.INCOMING_TYPE)
    {
        incommingCheck.setChecked(true);
        incommingEdit.setEnabled(true);
    }

    if(preferences.getInt("outgoingPhone", 0) == Calls.OUTGOING_TYPE)
    {
        outgoingCheck.setChecked(true);
        outgoingEdit.setEnabled(true);
    }

    if(preferences.getInt("missedPhone", 0) == Calls.MISSED_TYPE)
    {
        missedCheck.setChecked(true);
        missedEdit.setEnabled(true);
    }

    //Check if the application is on or off and set the text of the button.
    //preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
    boolean on = preferences.getBoolean("isOn", false);
    if(!on)
        toggle.setText("Turn On");
    else
        toggle.setText("Turn off");
}

Here is how i am saving all these preferences:

save.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            //Save all in the preference file and exit.
            //preferences = getSharedPreferences(Select.PREF_FILE_NAME, MODE_PRIVATE);
            Editor editor = preferences.edit();
            editor.putInt("incommingPhone", incomming);
            editor.putInt("outgoingPhone", outgoing);
            editor.putInt("missedPhone", missed);

            editor.putString("incommingMsgPhone", incommingMsg);
            editor.putString("outgoingMsgPhone", outgoingMsg);
            editor.putString("missedMsgPhone", missedMsg);

            editor.commit();
            finish();
        }
    });

my UI is updated properly second time i run my application but around third or fourth time i get default preference values. i even tried using getdefaultpreferences instead of getsharedpreferences, but no luck.

Upvotes: 3

Views: 6006

Answers (5)

Markus
Markus

Reputation: 1636

I had a similar problem with getStringSet, the documatation helped there

Note that you must not modify the set instance returned by this call. The consistency of the stored data is not guaranteed if you do, nor is your ability to modify the instance at all.

Upvotes: 5

Jacek Milewski
Jacek Milewski

Reputation: 3304

Try clearing your editor before using it. In other words do:

Editor editor = preferences.edit();
editor.clear();
editor.putInt("incommingPhone", incomming);
editor.commit();

I have had exactly same problem like yours and this worked for me. For my whole code sample see this post on my blog

Upvotes: 3

Victor Grazi
Victor Grazi

Reputation: 16520

I am having a similar problem - my String variables are being retained, but nothing else is. As a poor-man's workaround, I am saving everything as Strings.

Upvotes: 2

Peter
Peter

Reputation: 2500

it's example :

public void saveFavName(String what)
        {


             myPrefs= getSharedPreferences("myPrefs", MODE_PRIVATE);
             SharedPreferences.Editor es = myPrefs.edit();
             es.putString( "value", what); // add or overwrite someValue
                 es.commit(); // this saves to disk and notifies observers
        }

Upvotes: -1

Niranj Patel
Niranj Patel

Reputation: 33258

try this..

 preferences = activity.getSharedPreferences("Share", Context.MODE_PRIVATE);`

Upvotes: 0

Related Questions