将数据从一个 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 中的结果,您需要执行后续步骤:

  1. 使用一些常见的 REQUEST_CODE 变量,例如const val REQUEST_CODE: Int = 400
  2. 在activityA开始activityB使用方法startActivityForResult(intent, REQUEST_CODE);
  3. 在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)
        }
    }
    
  4. 在activityB开始activityC使用方法startActivityForResult(intent, REQUEST_CODE);

  5. 在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)
        }
    }
    
  6. 在activity C中将数据传回activity B:

    val intent = Intent().apply {
        putExtra("message", "This is the qty $scannedQTY")
    }
    setResult(Activity.RESULT_OK, intent)
    finish()