java - 如果在 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)是否存在问题,或者我在尝试像这样声明此类时是否出错?
解决方案
问题是您正在创建Application
该类的实例。它应该是这样的:
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
appContext = applicationContext
}
companion object {
lateinit var appContext: Context
}
}
推荐阅读
- javascript - 使用 Selenium 但不使用 AutoIt 自动上传图像
- postgresql - 如何在 postgres 中创建条件事务?
- node.js - Twilio 消息 API 不允许在其消息正文中使用变量或连接字符串
- azure - 使用 Azure 表单识别器 API 获取模型无效消息
- go - 我可以使用 for c := range 遍历字符串吗
但只使用字符而不使用索引? - angular - Angular 项目的 URL 在 Apache 服务器中运行的问题
- smartsheet-api - 尝试删除我创建的工作区时从 smartsheet API 收到错误
- c# - 一个数字范围内的素数
- mongodb - 有没有办法为此查询使用聚合管道方法
- asp.net-web-api2 - Web API 2:如果控制器方法同时被 [HttpPost] 和 [HttpGet] 重载,[FromBody] 控制器方法参数是否可以是可选的?