2012-03-08 3 views
1

Я пытаюсь создать один класс, который будет заниматься хранением и извлечением двух радиусов настроек пользователя и кластера.Android SharedPreferences NullPointerException on getSharedPreferences

При загрузке активности «Настройки» я получаю исключение с нулевым указателем.

Отрывок из настроек пользователя:

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();   
    } 
} 
+1

Пожалуйста, проверьте здесь: этот лучший лучший пример http://stackoverflow.com/questions/5734721/android-shared-preferences –

ответ

1

Ваш 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); 
+0

Я пробовал это во-первых, я не мог использовать функция getSharedPreferences. Есть ли что-то еще, что я должен использовать вместо этого? – Jack

+0

У вас, вероятно, не было контекста для вызова getSharedPreferences. Вы можете вызвать этот метод из контекстной переменной. –

+0

Спасибо, это работает. Приветствия за код тоже! +1 – Jack

1

хранения = новый Постоянство(); это не будет вызывать onCreate of Persistence. Было бы лучше создать общий класс. Вы создаете контекстную переменную и используете ее для создания экземпляра sharedpreference. Вы должны называть этот общий класс из класса активности

+0

Спасибо, это работает. +1 – Jack

Смежные вопросы