java.lang.ExceptionInInitializerError -- 原因:java.lang.NullPointerException

问题描述 投票:0回答:1

启动活动时,由于 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) 

编辑太多还是抛出异常,无法解决

android kotlin nullpointerexception
1个回答
0
投票

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

var emojilist 在应用程序可以设置 photoApp 变量之前被初始化。这会导致 NPE,因为您在 photoApp 初始化之前访问它。一个快速的解决办法是让变量变得惰性,就像这样:

private val emojisList by lazy { getEmojis(photoApp) } 

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

© www.soinside.com 2019 - 2024. All rights reserved.