Как использовать метод деятельности в неактивном классе?Мой сбой программы, когда я пытаюсь использовать контекст - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь использовать метод openFileOutput в классе бездействия. Когда я пытаюсь использовать контекст из MainActivity (this), происходит сбой программы.

Какая форма для использования этого метода в моем классе?

private Context context;

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

public void setEvent(int year, int month, int dayNumber, int hour, int minutes, String event, String eventParameters) {
    try {
        OutputStreamWriter events = new OutputStreamWriter(context.openFileOutput("events.txt", Context.MODE_PRIVATE));         

    } catch(IOException e) {
        e.printStackTrace();
    } // End of try  
} // End of method - setEvent

У меня есть персонализированный диалог, он используется для вызова метода setEvent.

public CellOptions(final Dialog dialog) {

final Events event = new Events(dialog.getContext());       
final TextView newEvent = (TextView) dialog.findViewById(R.id.newEvent), eventView = (TextView) dialog.findViewById(R.id.eventView);

newEvent.setOnClickListener(new View.OnClickListener() {
    public void onClick(View option) {
        event.setEvent(2018, 0, 1, 0, 0, "New year", "Nothing");

        eventView.setBackgroundColor(Color.rgb(0, 0, 8));
    }
});
}

public boolean showed() {
    return true;
}

Также я пытался использовать setEvent в классе MainActivity из следующей формы.

Events event = new Events(this, the next parameters);

Но это не работает.

Я искал ответы об этой проблеме, но не могу найти решение, которое мне помогает.

Я нашел эти страницы, но та же проблема продолжается.

как вызвать метод в форме деятельности, не относящейся к классу деятельности

Получение активности из контекста в Android

с использованием openFileOutput () в классе. (не деятельность)

http://www.sgoliver.net/blog/ficheros-en-android-i-memoria-interna/

При запуске программы происходит сбой при использовании контекста.

Logcat показывает это:

01-03 15: 55: 25.932: W / Binder (632): обнаружена исключительная ситуация RuntimeException из реализации заглушки Binder. 01-03 15: 55: 25.932: W / Binder (632): java.lang.NullPointerException 01-03 15: 55: 25.932: W / Binder (632): на android.inputmethodservice.IInputMethodWrapper.setSessionEnabled (IInputMethodWrapper.java:280) 01-03 15: 55: 25.932: W / Binder (632): на com.android.internal.view.IInputMethod $ Stub.onTransact (IInputMethod.java:129) 01-03 15: 55: 25.932: W / Binder (632): на android.os.Binder.execTransact (Binder.java:404) 01-03 15: 55: 25.932: W / Binder (632): at dalvik.system.NativeStart.run (собственный метод) 01-03 15: 55: 25.932: W / InputMethodManagerService (487): Получено RemoteException, отправляющее уведомление setActive (false) на pid 2744 uid 10036 01-03 15: 55: 26.572: I / ActivityManager (487): отображается com.android.dropcalendary / .MainActivity: + 4s402ms

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Используйте ApplicationContext вместо контекста.Поскольку жизненный цикл этого контекста сохраняется до тех пор, пока приложение не будет уничтожено или завершено.Таким образом, Context сохраняется только до тех пор, пока действие не будет уничтожено.

getApplicationContext();      
0 голосов
/ 04 января 2019

Я достиг решения проблемы.

Метод работает в действии. Чтобы использовать метод в классе бездействия, я использовал:

getApplicationContext();

Я использовал его, отправляя контекст начиная с MainActivity, через класс CellOptions и класс CellOptions, и отправлял тот же контекст.

MainActivity:

new CellOptions(cellOptions, getApplicationContext());

Класс CellOptions(context = context приложения):

Events event = new Events(context);

Класс событий:

context.openFileOutput(events.txt);

Другая проблема заключалась в том, что я использовал "/", а вместо этого я использовал "\\"

0 голосов
/ 03 января 2019

Использование метода активности в классе неактивности? Короткая история, Вы не можете

Но, безусловно, есть способ для этого, вы можете передать свою активность (что обычно не очень хорошая идея, если ваша деятельность разрушена, это может привести к нулевому указателю или утечке памяти).

Еще один способ - если вам нужен контекст, вы можете использовать ApplicationContext для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...