首页 > 解决方案 > 如果在 Kotlin 与 Java 中声明,用作全局上下文的 MainApplication 类会崩溃

问题描述

我在 AndroidManifest.xml 中声明了一个MainApplication

    <application
    android:name=".MainApplication" ...other stuffs >

我用作我的应用程序的全局上下文,可在任何 Activity 或 Fragment 之外访问。

如果我将 MainApplication 类声明为:

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我会收到一条错误消息,说我正在对空对象调用 sharedPreferences

class MainApplication: Application() {
companion object {
    @JvmStatic
    val shared: MainApplication = MainApplication()
}

Kotlin 类声明和单例(SharedInstances)是否存在问题,或者我在尝试像这样声明此类时是否出错?

标签: javaandroidkotlinsharedpreferences

解决方案


问题是您正在创建Application该类的实例。它应该是这样的:

class MainApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        appContext = applicationContext
    }

    companion object {
        lateinit var appContext: Context
    }
}

推荐阅读