Я не могу понять, как использовать общие настройки в другом классе, который не является фрагментом или чем-то еще.
Вот мой основной код активности:
public class MainActivity extends AppCompatActivity {
Backgrounds backs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
backs = new Backgrounds(this);
bg = (LinearLayout) findViewById(R.id.background);
bg.setBackgroundColor(getResources().getColor(backs.getBackground()));
}
}
А вот мой класс Backgrounds:
public class Backgrounds {
Integer colors[] = {
R.color.red,
R.color.pink,
R.color.purple,
};
private context;
SharedPreferences sharedPref = context.getSharedPreferences("file", 0);
SharedPreferences.Editor editor = sharedPref.edit();
int i = sharedPref.getInt("background", -1);
public Backgrounds(Context context)
{
this.context = context
}
public int getBackground()
{
i++;
try{
editor.putInt("factIndex", i);
editor.commit();
return colors[i];
}catch (Exception e){
i = 0;
editor.putInt("factIndex", i);
editor.commit();
return colors[i];
}
}
}
Я пробовал это многими способами. Я почти уверен, что это проблема с контекстной частью кода, поскольку я получаю эту ошибку:
Вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод «android.content.SharedPreferences android.content.Context.getSharedPreferences (java.lang.String, int)» для нулевой ссылки на объект
Я также пробовал использовать context.getApplicationContext(), но ошибка была похожей. Я подумал, что это может быть из-за того, что мне нужно было переместить назначение объекта Backs в onCreate(), но это все еще не работает. Я очистил проект и синхронизировал файлы с помощью gradle, но программа все равно вылетает до загрузки. Код отлично работает при удалении любых материалов SharedPrefrances.
sharedPref
,context
становитсяnull
. Переместите назначениеsharedPref
иeditor
в конструктор - person Bene   schedule 16.12.2016