我正在为Android安装启动器。目前我正在为地址簿工作(是的,我想将它包含在我的启动器中),但我得到了nullPointerExeption。 这是我的主框架的一部分,其中调用导致错误的类。
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 :(得分:3)
NPE是因为Numbers是一个活动但没有有效的上下文(或者更确切地说,不是一个)。
看起来你所做的是使你的Numbers类扩展Activity,以便你可以在其上调用getSharedPreferences
。但是,您不能在Android中新建一个活动,您必须根据proper Activity life cycle创建它。
如果您希望能够在数字类中调用getSharedPreferences
,则可以删除extends Activity
,添加Context
成员变量,并在构造函数中初始化它。 / p>
public class Numbers
{
Context mContext;
public Numbers(Context context)
{
mContext = context;
}
然后你可以在上面调用getSharedPreferences:
pres = mContext.getSharedPreferences("1",0);
答案 1 :(得分:1)
您可以两次声明ShardPreference个对象。 1.班级 2.在adNumber()。
所以,请删除其中一个,然后使用startup声明。
SharedPreferences pres = getApplicationContext().getSharedPreferences("MyPres", MODE_PRIVATE);
并在任何地方使用它是你在课堂级别声明它。
答案 2 :(得分:0)
如果您使用editor.putString(number,button);
,&#39;号码&#39;是你的钥匙和按钮&#39;是你的默认值。
如果您想检索&#39;数字&#39;的值在您的SharedPreferences中,您应该致电getString(key, defValue)
,如下所示:
return pres.getString(number, "");
答案 3 :(得分:0)