Как вызвать метод из другого класса без передачи контекста?

В настоящее время я пытаюсь вызвать метод из служебного класса, который будет ссылаться на новый курсор, созданный для этого метода утилиты. К сожалению, мой новый класс не позволит мне создавать курсор без контекста. Я пробовал множество способов передачи контекста из вызывающей активности, но в большинстве случаев получаю исключения с исключительным указателем.

Вот часть моего кода:

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                        Tools.pickRandomItem();

                    }
});

и в классе "Инструменты":

     public static void pickRandomItem() {   

    Cursor cur = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, 
               null, null,MediaColumns.TITLE + " ASC");




}

Используя приведенный выше код, он выдает ошибку на getContentResolver(), и все попытки, которые я сделал для передачи контекста, потерпели неудачу.

Я новичок в программировании для Android и не совсем понимаю концепцию контекстов. Любая помощь, которую вы могли бы предоставить, была бы с благодарностью!

Ответ 1

Создайте класс, который расширяет Application для вашего проекта (вы должны также объявить его в манифесте), в Приложении сделать

private static MyApplication app

в onCreate() его присваивает ему поле

app = this;

и сделайте

public static MyApplication get()

. Когда вам нужен контекст, вы можете использовать

MyApplication.get()

Ответ 2

Несколько советов по контексту:

  • Получить контекст в вас Просмотр через getContext() и передать его getContentResolver(context).

  • Используйте подход приложения-контекста, описанный здесь @apps.

  • Не сохранять контекст внутри Activity или Views. Это приводит к утечкам памяти.