Проблема с общими предпочтениями - PullRequest
1 голос
/ 10 мая 2011

Я немного запутался с тем, как работает это общее предпочтение. У меня был пример кода с веб-сайта на основе общих настроек. Моя проблема в том, что editor.commit () не обновляется сразу. Вот мой пример кода,

 public class PreferencesDemo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Get the app's shared preferences
    SharedPreferences app_preferences = 
        PreferenceManager.getDefaultSharedPreferences(this);

    // Get the value for the run counter
    int counter = app_preferences.getInt("counter", 0);

    // Update the TextView
    TextView text = (TextView) findViewById(R.id.text);
    TextView text1 = (TextView) findViewById(R.id.text1);
    text.setText("This app has been started " + counter + " times.");

    // Increment the counter
    SharedPreferences.Editor editor = app_preferences.edit();
    editor.putInt("counter", counter+2);
  editor.apply();

    editor.commit(); // Very important
    text1.setText("This app has been started " + counter + " times.");
}

}

Как видите, у меня есть счетчик, значение которого я отображаю в первом textView, а после оператора commit я печатаю обновленное значение в следующем TextView. Но все же оба текстовых представления выводят одно и то же значение по умолчанию, что и «0». Поэтому, если я перезапущу приложение, оба текстовых представления будут обновлены. Как решить эту проблему. Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 10 мая 2011

Вам нужно снова получить счетчик!

чтобы вы снова получили значение из настроек

В любом случае метод apply () в основном такой же, как и метод commit (), поэтому его нужно вызывать только один раз! Разница лишь в том, что метод apply - это новый способ фиксации изменений в фоновом потоке вместо основного потока !!!

 public class PreferencesDemo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// Get the app's shared preferences
SharedPreferences app_preferences = 
    PreferenceManager.getDefaultSharedPreferences(this);

// Get the value for the run counter
int counter = app_preferences.getInt("counter", 0);

// Update the TextView
TextView text = (TextView) findViewById(R.id.text);
TextView text1 = (TextView) findViewById(R.id.text1);
text.setText("This app has been started " + counter + " times.");

// Increment the counter
SharedPreferences.Editor editor = app_preferences.edit();
editor.putInt("counter", counter+2);
editor.commit(); // Very important
counter = app_preferences.getInt("counter", 0); //ADD THIS LINE!
text1.setText("This app has been started " + counter + " times.");
}
0 голосов
/ 10 мая 2011

попробуйте это для значения магазина в sharePreferences ..

SharedPreferences prefs = getSharedPreferences("Share", Context.MODE_PRIVATE );
Editor editor = prefs.edit();
editor.putInt("Value", 1 );
editor.commit();

для получения значения

prefs.getInt("Value",0);
0 голосов
/ 10 мая 2011

Просто замените

editor.putInt("counter", counter+2);

на

counter+= 2;
editor.putInt("counter", counter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...