gpt4 book ai didi

没有 Activity 的Android Context?和其他无 Activity 编程?

转载 作者:IT老高 更新时间:2023-10-28 23:39:03 34 4
gpt4 key购买 nike

我会努力把它变成一个综合性的问题:

我正在编写一个方法来获取包含 Android 设备城市名称的字符串,该名称由 LocationManagergetLastKnownLocation() 以及所有这些确定。

然后我意识到我需要在另一个 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();

我的 LocationFinderonCreate() 的第一行是

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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com