启动活动时,由于PhotoApp应用程序的上下文可以为空,因此引发了此异常. 我试了这么多次,但我找不到问题所在. 如果有人能帮上忙,谢谢你.

片段内的PhotoApp调用.

companion object {
        private var emojisList = getEmojis(photoApp)
        private fun getEmojis(context: Context?): ArrayList<String> {
            val convertedEmojiList = ArrayList<String>()
            val emojiList = context!!.resources.getStringArray(R.array.photo_editor_emoji)
            for (emojiUnicode in emojiList) {
                convertedEmojiList.add(convertEmoji(emojiUnicode))
            }
            return convertedEmojiList
        }

PhotoApp应用程序

class PhotoApp : Application() {
    override fun onCreate() {
        super.onCreate()
        photoApp = this
    }

    companion object {
        var photoApp: PhotoApp?= null
            private set
        private val TAG = PhotoApp::class.java.simpleName
    }
}
FATAL EXCEPTION: main
Process: com.eltoha.chatDate, PID: 26839
java.lang.ExceptionInInitializerError
at     com.eltoha.chatDate.photoEditor.EditImageActivity.onCreate(EditImageActivity.kt:93)
at android.app.Activity.performCreate(Activity.java:8163)
at android.app.Activity.performCreate(Activity.java:8130)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1330)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3744)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3938)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2291)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8319)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)


Caused by: java.lang.NullPointerException
    at com.eltoha.chatDate.photoEditor.EmojiBSFragment$Companion.getEmojis(EmojiBSFragment.kt:102)
at com.eltoha.chatDate.photoEditor.EmojiBSFragment.<clinit>(EmojiBSFragment.kt:92)
                                                                                                        at com.eltoha.chatDate.photoEditor.EditImageActivity.onCreate(EditImageActivity.kt:93) 
                                                                                                        at android.app.Activity.performCreate(Activity.java:8163) 
                                                                                                        at android.app.Activity.performCreate(Activity.java:8130) 
                                                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1330) 
                                                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3744) 
                                                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3938) 
                                                                                                        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
                                                                                                        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
                                                                                                        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
                                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2291) 
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106) 
                                                                                                        at android.os.Looper.loopOnce(Looper.java:210) 
                                                                                                        at android.os.Looper.loop(Looper.java:299) 
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8319) 
                                                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) 
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038) 

在进行了太多编辑之后,这个异常仍然在抛出,我无法解决它.

推荐答案

片段的静态成员(伴随对象内的属性)在应用程序启动时可用,而与生命周期无关.

因此,在应用程序可以设置PhotoApp变量之前初始化var emojilist.这会导致NPE,因为您在初始化PhotoApp之前访问它.一种快速的解决方法可能是让变量变得懒惰,如下所示:

private val emojisList by lazy { getEmojis(photoApp) } 

这样,变量在第一次被引用时就会被初始化.假设您在应用程序通过onCreate生命周期步骤时引用emojiList.我建议将变量也放在伴随的对象块之外,因为片段不应该被Android应用程序的其他部分引用.

Android相关问答推荐

ArrayList.remove()(Kotlin中的removeAt())导致奇怪的IndexOutOfBoundsResponse异常

Android深度链接配置中的URL片段匹配'

即使安装了Chrome和YouTube,Android对action_view a YouTube URL的意图也是空的

Jetpack创作动画断断续续变化的观点

Android:微调:在代码中设置ArrayAdapter不希望调用On ItemSelected,仅当用户单击微调时调用

如何使可拖动内容停留在可组合框的边界内

安卓Azure通讯聊天UI库导入?

SmsMessage如何在Kotlin库中工作?

在 Bash 脚本中使用 XMLLINT 解析 XML 单元测试文件,并将其放入数组中以表示成功和失败

我的自定义小吃店不适合我的全宽屏幕尺寸

Jetpack Compose with Paging 3 发出太多网络请求

以下代码如何在 Android 上运行

重命名列失败的房间自动迁移(NOT NULL 约束失败,生成错误的迁移类)

为什么我在 Jetpack Compose 中被警告可选修饰符参数应该具有默认值修饰符?

android 13 版本是否会影响 android 12 目标应用程序

如何从 Jetpack Compose 中的 Radio 组中获取价值

Android Jetpack Compose - 找不到 R.drawable?

如何在 Android Studio 中使用 Github Copilot?

我可以在不解密的情况下使用 JSch 获取加密的 SSH 私钥的类型或 fingerprint 吗?

使用 Jetpack Compose 的深层链接导航到可组合项