由 Intent 引起的 IllegalStateException?
IllegalStateException Caused By Intent?
我有时会在我的申请中发现 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)
查了一下,这个问题是由Intent.getStringExtra()引起的,代码如下:
private lateinit var mArticle : ArticleModel
private lateinit var mArticleImg : String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_article_detail)
val intent : Intent = this.intent;
mArticleImg = intent.getStringExtra( "articleImg" ) <-- here is where it crashed
mArticle = intent.getParcelableExtra("data")
}
已在许多测试设备上对此进行了测试,但无法重现此崩溃问题,除非我查看了 google 崩溃报告。 IllegalStateException 到底是什么?发生这种情况是因为意图 return 值吗?
使用这些检查来确保密钥可用
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
或 .let{..}
:
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
我有时会在我的申请中发现 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)
查了一下,这个问题是由Intent.getStringExtra()引起的,代码如下:
private lateinit var mArticle : ArticleModel
private lateinit var mArticleImg : String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_article_detail)
val intent : Intent = this.intent;
mArticleImg = intent.getStringExtra( "articleImg" ) <-- here is where it crashed
mArticle = intent.getParcelableExtra("data")
}
已在许多测试设备上对此进行了测试,但无法重现此崩溃问题,除非我查看了 google 崩溃报告。 IllegalStateException 到底是什么?发生这种情况是因为意图 return 值吗?
使用这些检查来确保密钥可用
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
或 .let{..}
:
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