2016-07-18 4 views
1

Я пытаюсь создать приложение для своего собственного использования, и я пытаюсь сохранить 3 поля editText в Sharedpref, поэтому я могу использовать эти значения, чтобы вычислить их позже в приложении.Sharedpreferences для сохранения editText

Вот код:

SharedPreferences mSharedPreferences; 
private EditText mEditTextBench; 
private EditText mEditTextSquat; 
private EditText mEditTextDead; 
private Button mButton; 
public String maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

Тогда в OnCreate метод у меня есть:

mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(this.getBaseContext()); 
    mButton = (Button) findViewById(R.id.button); 
    mEditTextBench = (EditText) findViewById(R.id.editTextBench); 
    mEditTextSquat = (EditText) findViewById(R.id.editTextSquat); 
    mEditTextDead = (EditText) findViewById(R.id.editTextDead); 

и мою кнопку onclicklistener:

mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      SharedPreferences.Editor editor = mSharedPreferences.edit(); 
      editor.putString("maxDead", mEditTextDead.getText().toString()); 
      editor.commit(); 

Если я ставлю общественное Струнный maxDead, как конечная строка в методе onCreate, она работает, но я хочу иметь возможность изменить строку в будущем , используя editText. Я не думаю, что могу назвать его финальным.

Путь код теперь я получаю эту ошибку:

Attempt to invoke interface method 'java.lang.String android.content.SharedPreferences.getString(java.lang.String, java.lang.String)' on a null object reference

+0

Эта линия общественности Строка maxDead = mSharedPreferences.getString ("maxDead", "DEFAULT"); должно быть ниже: mSharedPreferences = PreferenceManager.getDefaultSharedPreferences (this.getBaseContext()); –

+0

вы пишете 'public String maxDead = mSharedPreferences.getStr («maxDead», «DEFAULT»); 'out onCreate? –

+0

@GyanendraMani Когда я пытаюсь поместить эту строку String maxDead = mSharedPref ..... Я получаю сообщение об ошибке Variable maxDead, доступное изнутри внутреннего класса, должно быть объявлено окончательным – LBJ33

ответ

1

ваш код должен быть таким.

SharedPreferences mSharedPreferences; 
private EditText mEditTextBench; 
private EditText mEditTextSquat; 
private EditText mEditTextDead; 
private Button mButton; 
public String maxDead; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 

    mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(this.getBaseContext()); 
    maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

    mButton = (Button) findViewById(R.id.button); 
    mEditTextBench = (EditText) findViewById(R.id.editTextBench); 
    mEditTextSquat = (EditText) findViewById(R.id.editTextSquat); 
    mEditTextDead = (EditText) findViewById(R.id.editTextDead); 

    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      SharedPreferences.Editor editor = mSharedPreferences.edit(); 
      editor.putString("maxDead", mEditTextDead.getText().toString()); 
      editor.commit(); 
     } 
    }); 
} 

EDIT: здесь я показываю свой путь использования SharedPreference

SharedPreferences myPreference; 
String MY_PREFERENCE = "my_preference"; 

внутри OnCreate инициализирует SharedPreference:

myPreference = getSharedPreferences(MY_PREFERENCE, Context.MODE_PRIVATE); 

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

String data = myPreference.getString("maxDead", "") 

для редактирования SharedPreference:

SharedPreferences.Editor editor = myPreference.edit(); 
editor.putString("maxDead", mEditTextDead.getText().toString()); 
editor.commit(); 

Я надеюсь, что это поможет.

+0

спасибо! На самом деле, я все еще получаю сообщение об ошибке при попытке запустить программу. Попытка вызвать метод интерфейса «java.lang.String android.content.SharedPreferences.getString (java.lang.String, java.lang.String)» на нуле ссылка на объект – LBJ33

+0

какая ошибка? –

+0

java.lang.NullPointerException: попытка вызвать метод интерфейса 'java.lang.String android.content.SharedPreferences.getString (java.lang.String, java.lang.String)' на ссылке нулевого объекта – LBJ33

0

Вы получаете ошибку из-за этого:

public String maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

как вы не инициализирован mSharedPreferences так, его метания NullPointerException.

изменить это:

public String maxDead; 

, а затем инициализировать maxDead в методе onCreate после инициализации mSharedPreferences:

maxDead = mSharedPreferences.getString("maxDead", "DEFAULT"); 

UPDATE

Вы не получаете обновленное значение maxDead внутри onClickListener as значение переменной maxData устанавливается только один раз в onCreate. Таким образом, переменная не обновляется, когда значение maxData обновляется в SharedPreferences.Таким образом, вместо того, чтобы переменная следует использовать метод, как это, чтобы получить последнее значение из SharedPreference:

private String getMaxDead(){ 
    if(mSharedPreferences == null) 
     mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.getBaseContext()); 
    return mSharedPreferences.getString("maxDead", "DEFAULT"); 
} 

Так используйте: getMaxDead() в своем тосте, и он будет работать.

+0

спасибо! На самом деле, я все еще получаю сообщение об ошибке при попытке запустить программу. Попытка вызвать метод интерфейса «java.lang.String android.content.SharedPreferences.getString (java.lang.String, java.lang.String)» на нуле ссылка на объект – LBJ33

+0

вы можете поделиться полной степенью? –

+0

получил его на работу! сделал глупую ошибку. Спасибо! Еще один вопрос, я поставил сообщение с тостом, чтобы показать, что такое обновленное значение, но когда я нажимаю на кнопку, он работает в первый раз, но если я изменил значение и снова нажму кнопку, он все равно отобразит предыдущий номер, если Я выхожу из этого макета, а затем обратно в него. Есть ли причина для этого? благодаря! – LBJ33

0

Я также очень новичок в Android, но я постараюсь ответить. Причина, по которой вы получаете исключение, состоит в том, что при создании Activity ничего не происходит в String maxDead, поскольку она назначается сверху как private String maxDead. Когда вы нажимаете кнопку, вы присваиваете ей значение. Где вы хотите использовать это значение? Я еще не могу прокомментировать, поэтому я пишу это в ответ. :(

Это пример того, как я использую SharedPreferences:

SharedPreferences spref = getSharedPreferences("MY_PREFS", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = spref.edit(); 
editor.putString("maxDead", mEditTextDead.getText().toString()); 
editor.apply; 

А потом где-то (другая деятельность/фрагмент), где нужно значение:

String maxDead = spref.getString("maxDead", ""); 
+0

Спасибо, что именно есть двойные кавычки в spref.getString (" maxDead, "")? Выполнение? Я попытался установить начальное значение, изменив общедоступную строку maxDead = "100"; instread of public String maxDead .. но все равно получите ошибку. Мне нужны значения в другом файле макета. – LBJ33

+0

Получил его на работу, совершил глупую ошибку и забыл удалить какой-то старый код. работает без установки значения maxDead в начале! :) – LBJ33

+0

Хорошо, рад это слышать! – jlively

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