Как вызвать метод из другого класса без передачи контекста?
В настоящее время я пытаюсь вызвать метод из служебного класса, который будет ссылаться на новый курсор, созданный для этого метода утилиты. К сожалению, мой новый класс не позволит мне создавать курсор без контекста. Я пробовал множество способов передачи контекста из вызывающей активности, но в большинстве случаев получаю исключения с исключительным указателем.
Вот часть моего кода:
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. Это приводит к утечкам памяти.