2016-08-20 3 views
0

Я новичок в андроиде, и сегодня я хотел реализовать некоторые SharedPreferences.Android SharedPreferences успешно не работает

Вот мой код: (или Image если НУ нравится больше)

@Override 
public void onCreate(Bundle savedInstanceState) { 
// SOME CODE HERE 


    // Initialize Shared Preferences 
    final SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("MyData", Context.MODE_PRIVATE); 

    sharedPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() { 
     @Override 
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) { 
      logMsg(sharedPreferences.toString() + "=>" + s + "=>" + sharedPreferences.getString(s, "")); 
     } 
    }); 

    final EditText etId = (EditText) findViewById(R.id.etId); 
    final EditText etValue = (EditText) findViewById(R.id.etValue); 

    Button btnSave = (Button) findViewById(R.id.btn_save); 
    btnSave.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // set Data 
      logMsg("Id= " + etId.getText().toString() + " Value= " + etValue.getText().toString()); 
      sharedPreferences.edit().putString(etId.getText().toString(), etValue.getText().toString()); 
      if (sharedPreferences.edit().commit()){ 
       logMsg("Success"); 
      }else { 
       logMsg("Fail"); 
      } 

      // get Data 
      logMsg("Id= '" + etId.getText().toString() + "' Value= " + sharedPreferences.getString(etId.getText().toString(), "No Value")); 
     } 
    }); 


//SOME CODE HERE 
} 

Проблема заключается в том, что после нажатия btn_save журнала говорит Успех на sharedPreferences.edit().commit() но после этого я не получить какую-либо данные с getString() (соответственно я извлекаю значение dafault, что в моем случае «Нет значения»).

У вас есть идеи, что не так? Нужно ли отменить регистрацию SharedPreferences.OnSharedPreferenceChangeListener?

Спасибо.

+2

'успешно не работает' звучит как ** ерунда **, для меня ... –

+1

@ Rotwang вот почему я попросил вас, ребята, ответить :) –

+1

Кстати, есть вещь, называемая debug, которая точно говорит вам, что и где ваша проблема. сначала выполните отладку и проверьте, в чем проблема. надеюсь, что вы не против – Umair

ответ

3

Каждый раз, когда вы звоните edit(), вы получаете новый экземпляр SharedPreferences.Editor. Вам необходимо внести изменения и commit() (или apply()) в том же экземпляре редактора.

Поэтому сохраните возвращаемое значение edit() переменной и позвоните по телефону putString() и commit().

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