2013-06-19 4 views
2

Перемещение из Activity A в Activity B с помощью намерения. Я сохраняю некоторые значения в общих предпочтениях в Activity B. В активности A oncreate() Я извлекаю значения общих предпочтений для сравнения с некоторыми условиями, однако он дает мне исключение с нулевым указателем, как и ожидалось (поскольку я не перехожу к Activity B). Однако я хочу написать условие для извлечения данных из общих настроек, если значение не равно null. Можно сказать, что кто-то скажет, как могу ли я достичь этого? Ниже мой код:Общие предпочтения в android null Указатель указателя

In Activity B: 
       SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MerchantLogin.this); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putString("showdialog_login", "dontshow"); 
       editor.commit(); 
In Activity A: 
      @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 

     SharedPreferences prefs =null; 
prefs = PreferenceManager.getDefaultSharedPreferences(LoginScreen.this); 
SharedPreferences.Editor editor = prefs.edit(); 


if ((prefs.getString("showdialog_login", null).equalsIgnoreCase("dontshow"))) 
{ 

} 
else if((prefs.getString("showdialog_login", null).equalsIgnoreCase("true"))) 
{ 

} 
else if((prefs.getString("showdialog_login", null).equalsIgnoreCase("dummy"))) 
{ 

} 
else 
{ 
    editor.putString("showdialog_login", "false"); 
    editor.commit(); 
} 

    } 

Однако я получаю ошибку на этой линии:

if ((prefs.getString("showdialog_login", null).equalsIgnoreCase("dontshow"))).How can i execute this block of code. 

ответ

0

Вы должны всегда использовать константу в качестве первого аргумента, при сравнении с использованием equals, т.е.

"dontshow".equalsIgnoreCase(prefs.getString("showdialog_login", null)) 

Вы получаете NullPointerException, так как свойство showdialog_login еще не установлено, т.е.

prefs.getString("showdialog_login", null) 

возвращает null, так как это значение установлено по умолчанию.

эффективно, ваше состояние, таким образом,

null.equalsIgnoreCase("dontshow") 

-Какой естественно заканчивается в NullPointerException.

+0

Благодаря Золтан у спас меня много времени. – Joyson

2

Вместо:

prefs.getString("showdialog_login", null) 

Использование:

prefs.getString("showdialog_login", "") 

Потому что, если значение "showdialog_login" предпочтение не установлен, он будет возвращать нулевое значение, и вы могли бы получить NPE (исключение указателя Null).

0

В активность А:

static SharedPreferences prefs; 
@Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 

     prefs = getSharedPreferences("showdialog_login",0); 
     String ss= prefs.getString("showdialog_login", "default"); 
if ((ss.equalsIgnoreCase("dontshow"))) 
{ 

} 
else if((ss.equalsIgnoreCase("true"))) 
{ 

} 
else if((ss.equalsIgnoreCase("dummy"))) 
{ 

} 
else 
{ 
    editor.putString("showdialog_login", "false"); 
    editor.commit(); 
} 

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