Контекст Android из другого класса

Я пытаюсь сделать следующее...

FileInputStream fIn;
try {
fIn = openFileInput("samplefile.txt");
InputStreamReader isr = new InputStreamReader(fIn);
BufferedReader br = new BufferedReader(isr);
isTrue = Boolean.parseBoolean(br.readLine());
Log.i("IN", "isTrue = " + isTrue);
}

Но это будет работать только в классе, который расширяет класс Activity в Android.

У меня есть класс «Настройки», который записывает и читает текущие настройки игры из файла, но в этом файле много данных, которыми я действительно не хочу манипулировать.

Первоначально я использовал BufferedReader и BufferedWriter, но я не могу установить для данных значение Private, что означает, что любой может просто редактировать файл. С OutputStreamWriter по крайней мере немного безопаснее

Как мне получить доступ к классу «Настройки» (который имеет полностью статические методы) для доступа к контексту, чтобы я мог использовать такие методы, как openFileInput


person Chris    schedule 10.09.2011    source источник


Ответы (3)


Создайте конструктор для вашего класса настроек с аргументом контекста. Затем, когда вы создаете экземпляр объекта из этого класса, просто передайте контекст вашего приложения, вот и все.

Конструктор:

 public Settings(Context cont)
{
     //do something with the context, e.g assign it to some private variable of type Context

}

В вашем классе активности:

Settings settings = new Settings(MyActivity.this);
person Nikola Despotoski    schedule 10.09.2011
comment
Его класс Settings имеет только статические методы. - person Ronnie; 10.09.2011

Вместо передачи контекста было бы более уместно использовать Fileclass. По возможности следует избегать передачи контекста другим классам.

    File file = new File("sample.txt");
    InputStream is = new FileInputStream(file);

Другой альтернативой может быть передача контекста методу.

boolean isTrue = Settings.readBoolean(MyClass.this);
person Ronnie    schedule 10.09.2011

Если вы используете несколько фрагментов с несколькими действиями, есть метод быстрого доступа для получения контекста. создать статический класс. определить контекст. всякий раз, когда вы меняете активность, меняйте контекст. получить контекст во фрагменте, используя этот статический класс. Я знаю, что вы можете получить контекст во фрагменте с помощью getactivity(), но если вы используете какой-либо адаптер или неконтекстный класс, это будет действительно полезно.

person raj kavadia    schedule 05.03.2019