2015-06-29 5 views
0

Я работаю для запуска андроида. На данный момент я работаю над адресной книгой (да, я хочу включить ее в свою программу запуска), но я получаю nullPointerExeption. Вот часть моего основного кадра, где вызывается класс, вызывающий ошибку.SharedPreferences nullPointerException при сохранении строк

Numbers j = new Numbers(); 
        EditText text = (EditText) findViewById(R.id.Number); 
        j.adNumber(text.getText().toString(), "1"); 

Вот номер класса

public class Numbers extends Activity { 
SharedPreferences pres; 



public void adNumber(String number, String button){ 
    SharedPreferences pres; 

    pres = getSharedPreferences("1",0); 
SharedPreferences.Editor editor = pres.edit(); 
editor.putString(number,button); 
editor.commit(); 
} 

    public String getNumber(String button){ 
    pres = getSharedPreferences("1",0); 
    return pres.getString(button,""); 
} 
} 

и вот сообщение об ошибке:

06-29 12:51:39.476 8983-8983/oo.seniorlauncher.com.o_seniorlauncher E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: oo.seniorlauncher.com.o_seniorlauncher, PID: 8983 
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference 
     at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:170) 
     at oo.seniorlauncher.com.o_seniorlauncher.Numbers.<init>(Numbers.java:26) 
     at oo.seniorlauncher.com.o_seniorlauncher.MainFrame$1$1.onClick(MainFrame.java:46) 
     at android.view.View.performClick(View.java:4780) 
     at android.view.View$PerformClick.run(View.java:19866) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5257) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Спасибо заранее.

+0

Почему Numbers a Activity в первую очередь? – Onheiron

+0

Что такое строка 26 класса Numbers? ('Numbers.java: 26') –

+0

его pres = getSharedPreferences (" 1 ", 0); – OAJJ

ответ

3

NPE - это потому, что Numbers является активностью, но не имеет допустимого контекста (точнее, это не).

Похоже, что вы сделали, чтобы ваш класс Numbers расширил Activity, чтобы вы могли называть его getSharedPreferences. Однако вы не можете просто создать новую активность в Android, вы должны создать ее в соответствии с proper Activity life cycle.

Если вы хотите, чтобы иметь возможность позвонить getSharedPreferences внутри вашего номера, вы можете избавиться от extends Activity, добавить переменную-член Context и инициализировать ее в конструкторе.

public class Numbers 
{ 
    Context mContext; 
    public Numbers(Context context) 
    { 
     mContext = context; 
    } 

, то вы можете позвонить getSharedPreferences на нем:

 pres = mContext.getSharedPreferences("1",0); 
+0

спасибо, что ты классный – OAJJ

1

Вы можете объявить объект ShardPreference дважды. 1. уровень класса 2. в adNumber().

поэтому, пожалуйста, удалите один из них и объявите это с помощью инициации.

SharedPreferences pres = getApplicationContext().getSharedPreferences("MyPres", MODE_PRIVATE); 

и использовал его в любом месте, вы объявляете его на уровне класса.

0

Если вы используете editor.putString(number,button);, «число» является ключом, и «кнопка» Ваше значение по умолчанию.

Если вы хотите, чтобы получить значение «чисел» в ваших SharedPreferences, вы должны позвонить getString(key, defValue) следующим образом:

return pres.getString(number, "");

0

Читать this и this

Вы объявили дважды переменными ваши SharedPreferences ,

Также необходимо позвонить getSharedPreference(String, int) только один раз, если вам нужно получить доступ к определенной общей переменной, вам нужно только pres.getString(label, default_value).

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