Не понимаю 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 шт):

Автор решения: Karl Marks

static методы не могут ссылаться на this, т.к. статики не знают про объект класса, более того они загружаются класслоадреом еще до того, как любой объект будет создан. Когда ты в методе MediaScannerConnection.scanFile используешь this, это просто не имеет смысла. Попробуй вместо использования this передавать то, что тебе нужно через аргумент метода. Например библиотека статических методов Math: Math.max(19, 123); Все, что необходимо методу приходит к нему через аргументы. Если ты сделал метод не статическим, то для вызова метода тебе понадобиться какой-то конкретный объект, так создай его перед вызовом:

MediaScannerConnection conn = new MediaScannerConnection();
conn.scanFiles(whatEver);
→ Ссылка