Я постараюсь сделать это очень сложно, чтобы превратить это в один всеобъемлющий вопрос:
Я пишу метод для получения строки, содержащей имя города Android-устройства, как определено LocationManager и getLastKnownLocation(), и все это.
Тогда я понял, что мне нужно будет сделать то же самое снова в другом действии, так почему бы просто не сделать совершенно отдельный класс (LocationFinder), который я мог бы использовать в своей программе, вместо того, чтобы писать дублирующий код везде?
Но я столкнулся с проблемами, которые меня смущают. Например, если я создаю этот класс (LocationFinder), должен ли он расширять Activity, даже если он никогда не визуализируется? Весь этот класс будет иметь множество геттеров вроде getLastKnownCity() или getCurrentCity() и возвращать строки. Я предположил, что не будет расширять класс Activity, поскольку он действительно не является активностью.
Но тогда какой контекст я использую для:
Geocoder geocoder = new Geocoder(Context context, Locale locale)
?
Это заставило меня предположить, что он ДОЛЖЕН быть активным. Поэтому я расширил Activity и заменил конструктор на
@Override
protected void onCreate(..............
но по какой-то причине, которая никогда не заканчивается вызовом, даже когда я помещаю
String city = new LocationFinder().getLastKnownCity();
Моя первая строка LocationFinder onCreate() -
System.out.println("HEY!")
и это даже не доходит до этого. Я получаю нулевой указатель на android.internal.os.LoggingPrintStream.println() и другие вещи.
Кроме того, существует множество системных констант, которые поступают из классов Activity. Например, мне нужно получить LOCATION_SERVICE, который является строкой, которую я не могу получить без расширения Activity. Конечно, я мог бы обмануть и просто вставить буквальную строку, но это неправильно.