Java 保存字符串时SharedReferences nullPointerException
我正在为android开发launcher。目前我正在为地址簿工作(是的,我想将它包括到我的启动器中),但我得到了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
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);