2016-08-16 3 views
1

Я начал разрабатывать довольно простое приложение, но по какой-то причине я не могу использовать sharedpreference. Приложение сработает, когда оно будет сохранено.Sharedpreferences в студии android

это мой код:

SharedPreferences sp=getSharedPreferences("details1",0); 
    SharedPreferences.Editor editor=sp.edit(); 
    editor.putString("etName",etName.getText().toString()); 
    editor.putString("etLName",etLName.getText().toString()); 
    editor.putString("etCity",etCity.getText().toString()); 
    editor.putString("btnDateOfBirth",btnDateOfBirth.getText().toString()); 
    editor.putString("btnGender",btnGender.getText().toString()); 
    editor.commit(); 

Я объявил о переменных, необходимых. Что может привести к его краху?

+1

Можете ли вы отправить stacktrace и еще какой-нибудь код. –

+0

Stacktrace mate, stacktrace. По какой-то причине это не происходит. У этого есть причина. –

+0

java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.text.Editable android.widget.EditText.getText()' на ссылке нулевого объекта на il.co.appschool.hw_ch7.MainActivity.saveDetails (MainActivity.java : 110) at il.co.appschool.hw_ch7.MainActivity $ HandleAlertDialogListener.onClick (MainActivity.java:101) edit: это происходит также, когда оно равно null btw – GuyTsir

ответ

0

Я вообще использовать этот способ, чтобы получить sharedPreferences моего приложения:

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 

Кроме того, вы должны предоставить трассировку стека, поскольку ошибка может быть такой, как мы ll исходят от методов getText, которые вы используете, например? Вы говорите, что переменные объявлены, но этого недостаточно. Они должны указывать на существующий TextView или вы получаете исключение нулевого указателя.

Дополнительный трюк: вы можете связать методы putX при возврате редактора.

editor.putString("etName",etName.getText().toString()) 
    .putString("etLName",etLName.getText().toString()) 
    .putString("etCity",etCity.getText().toString()) 
    .putString("btnDateOfBirth",btnDateOfBirth.getText().toString()) 
    .putString("btnGender",btnGender.getText().toString()) 
    .commit(); 

EDIT: от StackTrace, кажется, что etName равна нулю. Поэтому вы должны убедиться, что он указывает на существующий TextView. Как правило:

etName = findViewById(R.id.et_text); 

если ваш TextView (или EditText) имеет идентификатор et_text в макете XML.

+0

В нем говорится, что строка, в которой происходит ошибка, находится на первой строке put ряд. Так может быть? – GuyTsir

+0

Хорошо, я видел ваш стек, который вы прокомментировали, и, как я уже сказал, проблема исходит из TextViews и не имеет ничего общего с общими предпочтениями. Ваши переменные должны указывать на существующий TextView или вызывает исключение нулевого указателя. –

+0

Спасибо за быстрые ответы кстати. Я довольно новичок в разработке Android, так жаль заранее. Мои переменные EditText запустили null, когда я попытался использовать sp. ОГРОМНЫЙ РЕДАКТ: Я ДУМАЮ, ЧТО МОЖЕТ БЫТЬ ПРАВИЛЬНО! ПОМОГИТЕ МНЕ ПРОВЕРИТЬ СНОВА! – GuyTsir

0

Вы пытались добавить контекст к getSharedPreference как

Context context = getActivity(); SharedPreferences sp=context.getSharedPreferences("details1",Context.MODE_PRIVATE);

Вы должны указать контекст запроса на SharedPreference

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