有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

GetSharedReferences上的java Android SharedReferences NullPointerException

我正在尝试创建一个类,它将处理存储和检索两个用户设置“radius”和“cluster”

加载“设置”活动时,我得到一个空指针异常

来自用户设置的代码片段:

    storage = new Persistence();
    radius = (EditText) findViewById(R.id.etRadius);        
    radius.setText(String.valueOf(storage.getRadius()));  <-- Problem

处理持久性的类:

public class Persistence extends Activity { 

    private static final String PREFERENCES = "tourist_guide_preferences";
    private SharedPreferences settings;
    private SharedPreferences.Editor editor;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        settings = getSharedPreferences(PREFERENCES, 0);
        editor = settings.edit();
    }

    public int getRadius()
    {
        return settings.getInt("radius", 2000);
    }

    public int getClusterSize()
    {
        return settings.getInt("cluster", 50);
    }

    public void setRadius(int radius)
    {
        editor.putInt("radius", radius);
        editor.commit();
    }

    public void setClusterSize(int size)
    {
        editor.putInt("cluster", size);
        editor.commit();        
    }   
}

共 (2) 个答案

  1. # 1 楼答案

    存储=新的持久性();这不会调用持久性活动的onCreate。 最好创建一个通用类。您可以创建一个上下文变量,并使用它来创建SharedReference实例。您应该从活动类调用此常规类

  2. # 2 楼答案

    你的Persistence类不应该是Activity。您应该使它成为一个普通类,并将其onCreate的代码放入这个普通类构造函数中

    将其更改为如下所示:

    public class Persistence { 
    
        private static final String PREFERENCES = "tourist_guide_preferences";
        private SharedPreferences settings;
        private SharedPreferences.Editor editor;
        private Context context;
    
    
        public Persistence(Context context)
        {
            this.context = context;
            settings = context.getSharedPreferences(PREFERENCES, 0);
            editor = settings.edit();
        }
    
        public int getRadius()
        {
            return settings.getInt("radius", 2000);
        }
    
        public int getClusterSize()
        {
            return settings.getInt("cluster", 50);
        }
    
        public void setRadius(int radius)
        {
            editor.putInt("radius", radius);
            editor.commit();
        }
    
        public void setClusterSize(int size)
        {
            editor.putInt("cluster", size);
            editor.commit();        
        }   
    }
    

    在您的活动中,您可以这样实例化这个Persistence类:

    storage = new Persistence(this);