これを1つの包括的な質問に変えるために一生懸命努力します:
私は、Android デバイスの都市の名前を含む文字列を取得するメソッドを作成してLocationManager
いgetLastKnownLocation()
ます。
その後、別のアクティビティで同じことを再度行う必要があることに気付きましたLocationFinder
。では、どこにでも重複するコードを記述するのではなく、プログラム全体で使用できる完全に別のクラス ( ) を作成してみませんか?
しかし、私を混乱させる問題に遭遇しました。たとえば、このクラス ( LocationFinder
) を作成した場合、実際には視覚化されていなくても、Activity を拡張する必要がありますか? getLastKnownCity()
このクラスが行うことは、 orgetCurrentCity()
および戻り文字列のようなさまざまな getter を持つことだけです。実際にはアクティビティではないため、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
、文字列である at を取得する必要がありますが、Activity を拡張しないと取得できません。確かに、ごまかしてリテラル文字列を挿入することもできますが、それは間違っていると感じます。