2013-12-07 2 views
1

Я строю проект андроида, содержащий SharedPreferences.SharedPreferences создает силу в программе android

Мой SharedPreferences работает отлично, и я проверил его в режиме mutiple. но в классе, который я определил для глобальных переменных, определяя, что SharedPreferences вызовет силовое замыкание (eclipse не обнаруживает ошибок в кодах).

public class Globals extends Application { 

    final SharedPreferences s = getSharedPreferences("Prefs", MODE_PRIVATE); 

} 

В чем проблема?

+1

SharedPreferences может быть получен только из контекста. Таким образом, это должно быть 'context.getSharedPreferences (" Prefs ", Context.MODE_PRIVATE);' Ваши члены ничего не знают об Context - это проблема. Вам необходимо передать переменную Context в качестве параметра в методе или через конструктор. – Sajmon

+0

Я его обманул: final SharedPreferences s = this.getSharedPreferences («Prefs», MODE_PRIVATE); но все же усиливает силу. – user3077909

+0

Вы не можете использовать это, потому что вы не находитесь в Activity (действия выходят из контекста по этой причине, вы можете использовать это или нет). Вам нужно явно передать Контекст как параметр, метод или конструктор. Нет другого способа, как это сделать. – Sajmon

ответ

1

Вы должны пройти Context и использовать

SharedPreferences prefs = Context.getSharedPreferences( "Prefs", Context.MODE_PRIVATE);

0

Создать конструктор и передать переменный контекст в качестве параметра. Любая деятельность, которая хочет использовать это предпочтение, тогда вы должны передать действие. Вот код, указанный ниже:

public class Globals extends Application { 

    private Context context; 

    public Globals (Context context) { 
     this.context = context; 
    } 

    SharedPreferences myPref = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE); 
} 
0

Вы не можете запустить getSharedPreferences() в самом классе. Все, что вы делаете, должно быть в методе onCreate приложения. Если вы попытаетесь запустить это в классе, он завершится неудачно, так как он еще не был инициализирован. Подумайте об этом почти как о деятельности, так как активность и приложение имеют жизненный цикл.

Попробуйте следующее:

public class Globals extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     final SharedPreferences s = getSharedPreferences("Prefs", MODE_PRIVATE); 
    } 
} 
Смежные вопросы