общие настройки не сохраняются - PullRequest
3 голосов
/ 20 июня 2011

В своей деятельности я обновляю пользовательский интерфейс в соответствии с сохраненными настройками.код для updateUI выглядит следующим образом:

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");
}

Вот как я сохраняю все эти настройки:

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();
        }
    });

мой пользовательский интерфейс обновляется правильно во второй раз, когда я запускаю свое приложение, но примерно в третьв четвертый раз я получаю значения по умолчанию.я даже пытался использовать getdefaultpreferences вместо getsharedpreferences, но не повезло.

Ответы [ 5 ]

5 голосов
/ 24 мая 2013

У меня была похожая проблема с getStringSet, там помогла документация

Обратите внимание, что вы не должны изменять экземпляр набора, возвращаемый этим вызовом. Согласованность хранимых данных не гарантируется, если вы не ваша способность изменить экземпляр вообще.

3 голосов
/ 21 сентября 2012

Попробуйте очистить свой редактор перед его использованием.Другими словами:

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

У меня была точно такая же проблема, как и у вас, и это сработало для меня.Для всего моего кода см. это сообщение в моем блоге

2 голосов
/ 16 марта 2012

У меня похожая проблема - мои строковые переменные сохраняются, но больше ничего нет. Как обходной путь бедного человека, я сохраняю все как строки.

0 голосов
/ 20 июня 2011

это пример:

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
        }
0 голосов
/ 20 июня 2011

попробуйте это ..

 preferences = activity.getSharedPreferences("Share", Context.MODE_PRIVATE);`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...