簡體   English   中英

保存字符串時,SharedPreferences nullPointerException

[英]SharedPreferences nullPointerException when saving strings

我正在為Android啟動器。 目前,我正在為通訊簿工作(是的,我想將其包括在啟動器中),但是我正在獲取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)

提前致謝。

該NPE是因為數字是一種活動,但沒有一個有效的上下文(或者更確切地說,它不是一個)。

看起來您已經完成了將Numbers類擴展為Activity的工作,以便可以在其上調用getSharedPreferences 但是,您不僅可以在Android中新建一個Activity,還必須根據適當的Activity生命周期進行創建。

如果您希望能夠在數字類內部調用getSharedPreferences ,則可以擺脫extends Activity ,添加一個Context成員變量,然后在構造函數中對其進行初始化。

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

那么您可以在其上調用getSharedPreferences:

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

您可以聲明ShardPreference對象兩次。 1.類級別2.在adNumber()中。

因此,請刪除其中之一,然后使用啟動器進行聲明。

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

並在您在類級別上聲明的任何地方使用它。

如果使用editor.putString(number,button); ,“數字”是您的鍵,“按鈕”是您的默認值。

如果要在SharedPreferences中檢索“ number”的值,則應按以下方式調用getString(key, defValue)

return pres.getString(number, "");

閱讀這個這個

您已經聲明了兩次SharedPreferences變量。

另外,您只需要調用getSharedPreference(String, int) ,如果您需要訪問特定的共享變量,則只需要pres.getString(label, default_value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM