Android 由意图引起的非法状态例外?

Android 由意图引起的非法状态例外?,android,kotlin,illegalstateexception,Android,Kotlin,Illegalstateexception,我有时在我的应用程序中发现java.lang.IllegalStateException: java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2825) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2886) at android.a

我有时在我的应用程序中发现java.lang.IllegalStateException:

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2825)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2886)
  at android.app.ActivityThread.-wrap12 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1623)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:186)
  at android.app.ActivityThread.main (ActivityThread.java:6509)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:914)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:804)

Caused by: java.lang.IllegalStateException: 
  at com.****.onCreate (***.kt:35) <-- here is the Intent.getStringExtra(..)
  at android.app.Activity.performCreate (Activity.java:6992)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2778)
java.lang.RuntimeException:
位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2825)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2886)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1623)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:186)
位于android.app.ActivityThread.main(ActivityThread.java:6509)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:914)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:804)
原因:java.lang.IllegalStateException:

在com.**.onCreate(***.kt:35)上使用这些检查以确保密钥可用

if (intent.hasExtra("articleImg")) {    
    mArticleImg = intent.getStringExtra( "articleImg" ) 
}

if (intent.hasExtra("data")) {
    mArticle = intent.getParcelableExtra("data")
}

您可以使用elvis运算符
?:

val intent : Intent = this.intent
mArticleImg = intent.getStringExtra("articleImg") ?: "null-value-fallback"
mArticle = intent.getParcelableExtra("data") ?: "null-value-fallback"
或者仅当值不为空时设置该值,例如使用
if
。让{..}

val intent : Intent = this.intent
intent.getStringExtra("articleImg")?.let { mArticleImg = it }
intent.getParcelableExtra("data")?.let { mArticle = it }

mArticleImg字段不接受空值。使用字符串?键入以允许或添加?:“null value”在GetStringExtral调用后提供一个回退值,将查看它。MARTICLIMG本身不应为空。共享您的startActivity代码如果是这种情况,他为什么会获得非法状态异常?很难说没有异常消息文本
val intent : Intent = this.intent
intent.getStringExtra("articleImg")?.let { mArticleImg = it }
intent.getParcelableExtra("data")?.let { mArticle = it }
Step 1: In the Button Click and Putting String Through Intent... as below

ll_Admin_Milk.setOnClickListener(View.OnClickListener {
            val intent = Intent(this, EggAndMilkActivity::class.java)
            intent.putExtra("Eggs","Eggs")
            intent.putExtra("Milk","Milk")
            startActivity(intent)
        })

Step 2: In the EggAndMilkActivity.Class i am Getting the intent value as below....

       val intent : Intent = this.intent
        intent.getStringExtra("Eggs")?.let { Eggs = it }
        intent.getStringExtra("Milk")?.let { Milk= it }

Step 3: Do not Forget to add this line of Code **?.let { Eggs = it }** other wise you will get illegalArgumentException..


-Happy Coding @Ambilpura