我在androidmanifest.xml中声明了一个mainapplication类
<application
android:name=".MainApplication" ...other stuffs >
我将其用作我的应用程序的全局上下文,可在任何活动或片段之外访问。
如果我将我的主应用程序类声明为:
public class MainApplication extends Application {
private static MainApplication instance;
public MainApplication() {
instance = this;
}
public static MainApplication shared() {
return instance;
}
}
一切都很好,我可以这样使用它:
val c = MainApplication.shared()
return c.getSharedPreferences(prefsKey, Context.MODE_PRIVATE)
但是如果我声明与kotlin类相同的类并调用 MainApplication.shared
我收到一个错误,说我正在调用空对象上的SharedReferences
class MainApplication: Application() {
companion object {
@JvmStatic
val shared: MainApplication = MainApplication()
}
kotlin类声明和singleton(sharedinstances)有问题吗?或者我在这样声明这个类时犯了错误吗?
2条答案
按热度按时间2ledvvac1#
问题是您正在创建
Application
班级。应该是这样的:u7up0aaq2#
您得到的错误是因为您不能以这种方式示例化应用程序对象。为了获得应用程序对象,需要在androidmanifest.xml中用android:name property
为了让应用程序在一个片段中,你可以这样做
或者在活动中
编辑1如果你想有一个单例,你可以直接在kotlin中创建它
但千万不要把上下文相关的对象放在静态变量中。