2013-06-16 3 views
1

В моей OnCreate() У меня есть:EditText SetText не отображая

if(sharedPref.getString("name",null)==""){EditText.setText("Something");} 
else{EditText.setText(sharedPref.getString("name",null));} 

А потом в моей OnStop() У меня есть:

sharedPrefEditor.putString("name",EditText.getText().toString()); 

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

ответ

0

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

Итак, прежде всего используйте equals вместо ==, а затем, если вы хотите получить пустую строку, если ключ не определен, введите пустую строку в качестве второго параметра метода SharedPreferences.gerString.

Надеется, что это помогает;)

+0

На самом деле, для этого случая мне нужно было сравнить строку с нулевым.Когда приложение впервые установлено, не должно быть sharedPreference, то есть все должно быть нулевым. Правильно ли я это интерпретирую? – Latcie

+0

вы можете сказать, что есть пустые sharedpreferences, вы можете сравнить его с тем, что хотите, если такого значения не сохранено, результатом функции _getString_ будет второй параметр, поэтому он не должен быть нулевым. – zozelfelfo

1

Не используйте == для сравнения содержимого Strings. Используйте equals() вместо:

if(sharedPref.getString("name",null).equals("")){ 
      EditText.setText("Something"); 
} 

Why should I use equals instead of ==

+0

Благодарю вас, это была проблема в данном конкретном случае. Но теперь мой EditText, похоже, дает исключение nullPointerException. Я инициализировал его в активности и определил его в onCreate(). – Latcie

+0

@Latcie Попробуйте найти, где это происходит. Он сказал в лобчате. –

0

== Оператора не может быть использован для сравнения строк в Java.

if(string1.equals(string2){ 
} 

Кроме того, вы устанавливаете значение SharedPreferences, но никогда не совершаете изменений.

sharedPrefEditor.commit(); 

OnCreate

String prefsVal = sharedPref.getString("name", null); 

if(prefsVal.equals(null)){ //If default value was returned 
    EditText.setText("Something"); 
}else{ 
    EditText.setText(prefsVal); 
} 

ИЛИ
Ниже превратит ваш код размещен в одном решении линии. Второй параметр, переданный в SharedPref, является значением по умолчанию, которое должно быть возвращено, если для данного ключа не найдено ни одной доли.

EditText.setText(sharedPref.getString("name", "Something"); 

OnStop

sharedPrefEditor.putString("name", EditText.getText().toString()); 
sharedPrefEditoy.commit(); 
0

Если "Something" будет использоваться, если предпочтение не установлен, то:

EditText.setText(sharedPref.getString("name","Something")); 

getString() автоматически вернется "Something" если параметр не установлен. Нет необходимости в дополнительном коде.

0
String strName = sharedPref.getString("name",""); 

if(!strName.isEmpty()){ 
      EditText.setText(strName); 
}else{ 
      EditText.setText("Something"); 
} 
Смежные вопросы