将数据从一个 activity 发送回另一个 ANDROID KOTLIN
Send data back from one activity to another ANDROID KOTLIN
我有这种情况。
假设我有 3 个活动 A B & C
从ActivityA开B
我对 B 执行某些验证,并使用 finish() 完成 B 的礼物 B
在 C 中,我得到返回 activity A 所需的值,结果我需要在 A 上显示。
我这样做了:
在 activity 答:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(requestCode == startValidationActivityCode){
val message = data!!.getStringExtra("message")
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}else{
super.onActivityResult(requestCode, resultCode, data)
}
}
我在 activity B
上什么都不做
然后在 activity C 中我有以下内容,其中 $scannedQTY 是我在 Activity A:
上需要的值
override fun onBackPressed() {
sendDataToPreviousActivity()
super.onBackPressed()
}
private fun sendDataToPreviousActivity(){
val intent = Intent().apply {
putExtra("message", "This is the qty $scannedQTY")
}
setResult(Activity.RESULT_OK, intent)
}
但是我得到这个错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=0, data=null} to activity
任何帮助将不胜感激。
谢谢大家!!!
如果您打开这样的活动:A -> B -> C,并希望从 activity C 中检索 activity A 中的结果,您需要执行后续步骤:
- 使用一些常见的
REQUEST_CODE
变量,例如const val REQUEST_CODE: Int = 400
- 在activityA开始activityB使用方法
startActivityForResult(intent, REQUEST_CODE)
;
在activity中重写onActivityResult()
方法:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) {
val message = data!!.getStringExtra("message")
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
在activityB开始activityC使用方法startActivityForResult(intent, REQUEST_CODE)
;
在activityB重写onActivityResult()
方法:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) {
makeValidations()
// pass data back to activity A
setResult(Activity.RESULT_OK, data)
finish()
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
在activity C中将数据传回activity B:
val intent = Intent().apply {
putExtra("message", "This is the qty $scannedQTY")
}
setResult(Activity.RESULT_OK, intent)
finish()
我有这种情况。
假设我有 3 个活动 A B & C
从ActivityA开B
我对 B 执行某些验证,并使用 finish() 完成 B 的礼物 B
在 C 中,我得到返回 activity A 所需的值,结果我需要在 A 上显示。
我这样做了:
在 activity 答:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(requestCode == startValidationActivityCode){
val message = data!!.getStringExtra("message")
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}else{
super.onActivityResult(requestCode, resultCode, data)
}
}
我在 activity B
上什么都不做然后在 activity C 中我有以下内容,其中 $scannedQTY 是我在 Activity A:
上需要的值 override fun onBackPressed() {
sendDataToPreviousActivity()
super.onBackPressed()
}
private fun sendDataToPreviousActivity(){
val intent = Intent().apply {
putExtra("message", "This is the qty $scannedQTY")
}
setResult(Activity.RESULT_OK, intent)
}
但是我得到这个错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=0, data=null} to activity
任何帮助将不胜感激。
谢谢大家!!!
如果您打开这样的活动:A -> B -> C,并希望从 activity C 中检索 activity A 中的结果,您需要执行后续步骤:
- 使用一些常见的
REQUEST_CODE
变量,例如const val REQUEST_CODE: Int = 400
- 在activityA开始activityB使用方法
startActivityForResult(intent, REQUEST_CODE)
; 在activity中重写
onActivityResult()
方法:override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) { val message = data!!.getStringExtra("message") Toast.makeText(this, message, Toast.LENGTH_LONG).show() } else { super.onActivityResult(requestCode, resultCode, data) } }
在activityB开始activityC使用方法
startActivityForResult(intent, REQUEST_CODE)
;在activityB重写
onActivityResult()
方法:override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) { makeValidations() // pass data back to activity A setResult(Activity.RESULT_OK, data) finish() } else { super.onActivityResult(requestCode, resultCode, data) } }
在activity C中将数据传回activity B:
val intent = Intent().apply { putExtra("message", "This is the qty $scannedQTY") } setResult(Activity.RESULT_OK, intent) finish()