Java 保存字符串时SharedReferences nullPointerException

Java 保存字符串时SharedReferences nullPointerException,java,android,Java,Android,我正在为android开发launcher。目前我正在为地址簿工作(是的,我想将它包括到我的启动器中),但我得到了NullPointerException。 这里是我的主框架的一部分,其中调用了导致错误的类 Numbers j = new Numbers(); EditText text = (EditText) findViewById(R.id.Number); j.adNumber(text.getText().t

我正在为android开发launcher。目前我正在为地址簿工作(是的,我想将它包括到我的启动器中),但我得到了
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)
06-29 12:51:39.476 8983-8983/oo.seniorlauncher.com.o_seniorlauncher E/AndroidRuntime﹕ 致命异常:主
进程:oo.seniorlauncher.com.o_seniorlauncher,PID:8983
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferences(java.lang.String,int)”
位于android.content.ContextWrapper.getSharedReferences(ContextWrapper.java:170)
在oo.seniorlauncher.com.o_seniorlauncher.Numbers.(Numbers.java:26)
在oo.seniorlauncher.com.o_seniorlauncher.MainFrame$1$1.onClick(MainFrame.java:46)
在android.view.view.performClick上(view.java:4780)
在android.view.view$PerformClick.run(view.java:19866)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5257)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
提前感谢。

您可以声明两次对象。 1.班级 2.在adNumber()中

所以,请移除其中一个,并与initiate一起声明如下

SharedPreferences pres = getApplicationContext().getSharedPreferences("MyPres", MODE_PRIVATE); 
在类级别上声明对象时,可以在任何地方使用它。

可以两次声明对象。 1.班级 2.在adNumber()中

所以,请移除其中一个,并与initiate一起声明如下

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

NPE是因为数字是一个活动,但没有有效的上下文(或者说,它不是一个上下文)

看起来您所做的是让您的Numbers类扩展活动,以便您可以对其调用
getSharedReferences
。然而,你不能仅仅在Android中创建一个新的活动,你必须根据

如果您希望能够在number类中调用
getSharedReferences
,则可以去掉
扩展活动
,添加
上下文
成员变量,并在构造函数中初始化它

public class Numbers
{
     Context mContext;
     public Numbers(Context context)
     {
         mContext = context;
     }
然后您可以在其上调用GetSharedReferences:

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

NPE是因为数字是一个活动,但没有有效的上下文(或者更确切地说,它不是一个上下文)

看起来您所做的是让您的Numbers类扩展活动,以便您可以对其调用
getSharedReferences
。然而,你不能仅仅在Android中创建一个新的活动,你必须根据

如果您希望能够在number类中调用
getSharedReferences
,则可以去掉
扩展活动
,添加
上下文
成员变量,并在构造函数中初始化它

public class Numbers
{
     Context mContext;
     public Numbers(Context context)
     {
         mContext = context;
     }
然后您可以在其上调用GetSharedReferences:

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

如果使用
editor.putString(数字、按钮),“number”是您的键,“button”是您的默认值

如果要在SharedReferences中检索'number'的值,应调用
getString(key,defValue)
,如下所示:


返回pres.getString(数字“”)

如果您使用
编辑器.putString(数字,按钮),“number”是您的键,“button”是您的默认值

如果要在SharedReferences中检索'number'的值,应调用
getString(key,defValue)
,如下所示:

返回pres.getString(数字“”)

读取并

您已经声明了两次SharedReferences变量

此外,只需调用一次
getSharedReference(String,int)
,如果需要访问特定的共享变量,只需
pres.getString(label,default_值)
读取并

您已经声明了两次SharedReferences变量


此外,您只需调用一次
getSharedReference(String,int)
,如果您需要访问特定的共享变量,您只需
pres.getString(label,default_value)

为什么数字首先是一个活动?这是数字类的第26行?(
Numbers.java:26
)其pres=getSharedReferences(“1”,0);为什么数字首先是一项活动?哪一行是数字课的第26行?(
Numbers.java:26
)其pres=getSharedReferences(“1”,0);