Android getApplicationContext () для пустой ссылки на объект - PullRequest
0 голосов
/ 06 апреля 2019

Я очень новичок в разработке Android и идее контекста. Поэтому, если окажется, что я явно поступаю неправильно, объясните, пожалуйста, что я должен делать вместо этого.

Я пытаюсь передать контекст приложения в конструктор (чтобы я мог получить доступ к таблицам БД в этом объекте), но продолжаю сталкиваться со следующей ошибкой:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext on a null object reference

Вот фрагмент моего кода:

public class FragmentShoppingList extends Fragment{

    MyApplication myApplication = new MyApplication();

    public FragmentShoppingList() {

    }

    SQLiteShoppingCartService sqLiteShoppingCartService = new SQLiteShoppingCartService(getActivity().getApplicationContext());
}

Почему getActivity() возвращает нулевую ссылку?

Ответы [ 3 ]

0 голосов
/ 06 апреля 2019

попробуйте только с getActivity().

Вместо getActivity().getApplicationContext().

0 голосов
/ 06 апреля 2019

Существует метод с именем onAttach (контекстный контекст) в жизненном цикле фрагмента Android

SQLiteShoppingCartService sqLiteShoppingCartService = new SQLiteShoppingCartService(getActivity().getApplicationContext());

Эта строка выше вызывается, когда FragmentShoppingList's объект создан.Контекст присваивается фрагменту в этом случае объект FragmentShoppingList только тогда, когда фрагмент прикреплен к окну, и это происходит в onAttach (контекстный контекст) метод.

MyApplication myApplication = new MyApplication();

Я полагал, что MyApplication выходит из Application, если это так, не создавайте так.Это точка входа для каждого Приложения Android, если вы ссылаетесь на него в файле Android.Manifest.

0 голосов
/ 06 апреля 2019

Фрагмент может существовать независимо от activity, в котором он находится. См. жизненный цикл фрагмента . Код инициализирует ваш sqLiteShoppingCartService при создании экземпляра фрагмента. Когда экземпляр создан, фрагмент не является частью какого-либо действия. Это позже присоединяется к деятельности. Используйте onActivityCreated метод жизненного цикла для инициализации sqLiteShoppingCartService.

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