保存字符串时SharedPreferences nullPointerException [英] SharedPreferences nullPointerException when saving strings

查看:857
本文介绍了保存字符串时SharedPreferences nullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为Android安装启动器。目前我正在为地址簿工作(是的,我想将它包含在我的启动器中),但我得到了nullPointerExeption。
这是我的主框架的一部分,其中调用导致错误的类。

I am working launcher for android. At the moment I am working for address book(yes I want to include it to my launcher), but I am getting nullPointerExeption. Here is part of my main frame where class that causes error is called.

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是一个活动但没有有效的上下文(或者说,不是一个)。

The NPE is because Numbers is an Activity but doesn't have a valid context (or rather, it isn't one).

看起来你所做的就是使您的Numbers类扩展Activity,以便您可以在其上调用 getSharedPreferences 。但是,您不能只在Android中创建一个Activity,您必须根据正确的活动生命周期

It looks like what you have done is made your Numbers class extend Activity so that you can call getSharedPreferences on it. However you can't just new an Activity in Android, you have to create it according to the proper Activity life cycle.

如果你想能够在里面调用 getSharedPreferences 你的数字类,你可以摆脱 extends Activity ,添加一个 Context 成员变量,并在构造函数中初始化它。

If you want to be able to call getSharedPreferences inside your number class, you can get rid of extends Activity, add a Context member variable, and initialize it in the constructor.

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

然后你可以在上面调用getSharedPreferences:

then you can call getSharedPreferences on it:

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

这篇关于保存字符串时SharedPreferences nullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆