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