Не понимаю this, static
Как новичок испытываю проблемы в создании классов в которых используется this. Попробую объяснить ... Вот я создаю новый класс Visualfile который принадлежит MainActivity (значит добавляю в нём - extends MainActivity). В новом классе создаю метод - public static void visualfile(). Что бы переменные в MainActivity использовались и в новом классе (обязательное условие!) прописываю их в MainActivity как public static. И всё всегда работает прекрасно, но не в тех случаях, когда в методе нового класса используется this, ну, например, MediaScannerConnection.scanFile(this, в таком случаи выдаётся ошибка и мне студия предлагает сделать его НЕ static. Ну хорошо, не ststic так не static, но теперь то ошибочен вызов моего метода Visualfile.visualfile(); из MainActivity. Порочный круг! Я прописывал в методе нового класса и null: MediaScannerConnection.scanFile(null, и ничего не подчёркивалось красным, но при вызове метода приложение вылетает. Подскажите, что делать то? Про this я конечно почитал, но в конкретном случаи мне это мало помогло.
Ответы (1 шт):
static методы не могут ссылаться на this, т.к. статики не знают про объект класса, более того они загружаются класслоадреом еще до того, как любой объект будет создан. Когда ты в методе MediaScannerConnection.scanFile используешь this, это просто не имеет смысла. Попробуй вместо использования this передавать то, что тебе нужно через аргумент метода. Например библиотека статических методов Math: Math.max(19, 123); Все, что необходимо методу приходит к нему через аргументы. Если ты сделал метод не статическим, то для вызова метода тебе понадобиться какой-то конкретный объект, так создай его перед вызовом:
MediaScannerConnection conn = new MediaScannerConnection();
conn.scanFiles(whatEver);