我会努力把它变成一个综合性的问题:
我正在编写一个方法来获取包含 Android 设备城市名称的字符串,该名称由 LocationManager
和 getLastKnownLocation()
以及所有这些确定。
然后我意识到我需要在另一个 Activity 中再次做同样的事情,所以为什么不创建一个完全独立的类 (LocationFinder
) 可以在我的程序中使用,而不是编写到处都是重复代码?
但我遇到了让我困惑的问题。例如,如果我创建这个类 (LocationFinder
),它是否应该扩展 Activity,即使它从未真正可视化?这个类所要做的就是拥有各种 getter,例如 getLastKnownCity()
或 getCurrentCity()
并返回字符串。我认为它不必扩展 Activity 类,因为它实际上不是一个 Activity 。
然后我用什么上下文:
Geocoder geocoder = new Geocoder(Context context, Locale locale)
?
这让我认为它必须是一项 Activity 。于是我扩展了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,我将无法获得它。当然,我可以作弊并只输入文字字符串,但这感觉不对。
最佳答案
编辑:如果可能,请使用 frogmanx 的答案。这应该只在他的答案不可能使用时使用。 (即,需要立即获得上下文的单例。)
听起来你应该扩展 Application而不是 Activity 。
使您的应用程序如下所示:
public class MyApplication extends Application {
private static MyApplication instance;
public MyApplication() {
instance = this;
}
public static MyApplication getInstance() {
return instance;
}
然后将此属性添加到 list 的应用程序标签中:
<application android:name=".your.package.MyApplication" ... />
毕竟,您可以通过从任何地方调用 MyApplication.getInstance()
来获取上下文。
关于没有 Activity 的Android Context?和其他无 Activity 编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441295/