2016-11-29 8 views
0

Я изучаю Android и для этого проекта мне нужно сохранить данные пользователя - изменение цвета кнопок, в данном случае -. Во время программы происходит изменение (onClick), но когда я перезапускаю приложение, ничего не происходит - изменение не было сохранено (или читать ...) Может ли кто-нибудь мне помочь? Код:Android: проблема с хранением данных (SharedPreferences)

final String paintKey = "paint"; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    buttonCreate(); 
    preferences(); 
    togglePlay(); 
} 

    public void preferences(){ //the issue in this method? 

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    data = settings.getString("stage", "Indoors"); 
    settings.getBoolean(paintKey,false); 

    String backGround = settings.getString("stage", "Indoors"); 

    if (backGround.equals("Indoors")) { 
     Picasso.with(this).load(R.drawable.shocked_crowd).fit().centerCrop().into(stage); 

    } 
    if (backGround.equals("Street")) { 
     Picasso.with(this).load(R.drawable.coins).fit().centerCrop().into(stage); 

    } 
} 

public void changeColor(){ 
    if(!paint) { //paint variable has global scope and it is set to false 
     c1.setBackgroundColor(Color.YELLOW); 

     paint = true; 
    }else{ 
     c1.setBackgroundColor(Color.BLUE); 

     paint = false; 
    } 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putBoolean("paint", paint); 
    editor.commit(); 
} 

EDIT: метод OnClick:

общественного недействительными OnClick (View v) {

if(v==color){ 

     changeColor(); 
    } 

EDIT: это, как я есть сейчас:

public void preferences(){ 

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    data = settings.getString("stage", "Indoors"); 
    final String paintKey = "paint"; 
    settings.getBoolean(paintKey,false); 

Неверно? если я ставлю редактор вместо параметров я получаю красный подчеркнутый

+0

Я не вижу фрагмент кода, который читается из клавиши «paint»: 'settings.getBoolean (« paint », false)'. Вы должны прочитать тот самый ключ, на который вы спасли. В идеале создайте 'final String paintKey =" paint "' variable. – foxanna

+0

Я добавил строку, но она не сработала ... также окончательная строка – glassraven

+0

Пожалуйста, обновите вопрос и фактическое поведение соответственно – foxanna

ответ

3

Для работы с SharedPreferences вам нужен глобальный ключ

final String paintKey = "paint" 

Чтобы написать логическое значение информации SharedPreferences использование

SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit(); 
editor.putBoolean(paintKey, paint).commit(); 

Чтобы прочитать, что данные позднее

paint = settings.getBoolean(paintKey, false); 
0

Эта строка получает значение из SharedPreferences и незамедлительно игнорирует ее. Вы должны сохранить возвращаемое значение в переменной, чтобы использовать его в дальнейшем:

boolean paint = settings.getBoolean(paintKey,false); 

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

Смежные вопросы