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

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

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

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 и не совсем понимаю концепцию контекстов. Любая помощь, которую вы могли бы предоставить, будет принята с благодарностью!


person Josh    schedule 14.11.2010    source источник
comment
Несмотря на то, что этот вопрос старше, на этот повторяющийся вопрос происходит лучшее обсуждение и более четкие ответы: stackoverflow.com/questions/7666589/   -  person tir38    schedule 02.05.2016


Ответы (2)


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

private static MyApplication app

в onCreate() назначьте его полю

app = this;

и сделать

public static MyApplication get()

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

MyApplication.get()
person apps    schedule 14.11.2010
comment
Работал отлично! Спасибо за помощь, это действительно ценно! - person Josh; 15.11.2010
comment
Я думаю, что getApplicationContext() - это еще один способ сделать то же самое. - person Rakesh; 13.09.2012
comment
использовать getApplicationContext() - person Nitin Bansal; 02.02.2013

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

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

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

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

person Peter Knego    schedule 14.11.2010
comment
Спасибо за совет. Благодаря вашим советам и большему чтению я узнал, насколько важна обработка контекста для управления памятью. - person Josh; 15.11.2010