Android Studio中的Java NullPointerException

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

[当我遇到NullPointerException时,我只是在创建该应用程序以进行练习,但是我的代码才刚刚开始工作,我不知道为什么会这样。

我正在实现onSaveInstanceStateonRestoreInstanceState来改变方向,并且player中第14行的SkillActivity.kt变量停止工作,因此我的应用程序不断崩溃。这是SkillActivity.kt中的代码:

package com.example.soosh.controller

import android.content.Intent
import android.os.Bundle
import android.os.PersistableBundle
import android.widget.Toast
import com.example.soosh.Model.Player
import com.example.soosh.R
import com.example.soosh.utlities.EXTRA_PLAYER
import kotlinx.android.synthetic.main.activity_skill.*

class SkillActivity : BaseActivity() {

    var player = intent.getParcelableExtra<Player>(EXTRA_PLAYER)

    override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
        super.onSaveInstanceState(outState, outPersistentState)
        outState.putParcelable(EXTRA_PLAYER, player)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_skill)

        finishBtn.setOnClickListener {
            if (player?.category != "") {
                val finished = Intent(this, FinishedActivity::class.java)
                finished.putExtra(EXTRA_PLAYER, player)
                startActivity(finished)
            }
            else {
                val popup = Toast.makeText(this, "Please select a category to continue.", Toast.LENGTH_LONG)
                popup.show()
            }

         }

        beginnerButton.setOnClickListener {
            ballerButton.isChecked = false
            player?.category = "Beginner"
        }

        ballerButton.setOnClickListener {
            beginnerButton.isChecked = false
            player?.category = "Baller"
        }


   }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        if (savedInstanceState != null) {
            player = savedInstanceState.getParcelable(EXTRA_PLAYER)
        }
    }

}

logcat中的错误:

06-07 19:07:18.973 7773-7773/com.example.soosh E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.soosh, PID: 7773
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.soosh/com.example.soosh.controller.SkillActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.content.Intent.getParcelableExtra(java.lang.String)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3007)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278)
    at android.app.ActivityThread.access$1000(ActivityThread.java:211)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:6918)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.content.Intent.getParcelableExtra(java.lang.String)' on a null object reference
    at com.example.soosh.controller.SkillActivity.<init>(SkillActivity.kt:14)
    at java.lang.reflect.Constructor.newInstance(Native Method)
    at java.lang.Class.newInstance(Class.java:1689)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1094)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2997)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278) 
    at android.app.ActivityThread.access$1000(ActivityThread.java:211) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:6918) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 

非常感谢您的帮助。谢谢:)

android android-studio kotlin nullpointerexception
1个回答
0
投票

仅在调用intent后才必须访问onCreate。您可以通过将其包装到lazy委托中来解决此问题:

val player by lazy { intent.getParcelableExtra<Player>(EXTRA_PLAYER) }
© www.soinside.com 2019 - 2024. All rights reserved.