I have this situation.
Let's say I have 3 activities A B & C
From Activity A y open B
I perform certain validations on B and the presents B finishing B using finish()
In C I get the values needed to get back to activity A with a result that I need to display on A.
I did this:
On activity A:
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)
}
}
I do nothing on activity B
Then in activity C I have the following, where $scannedQTY is the value I need on 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)
}
But I get this error:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=0, data=null} to activity
Any help will be really appreciate it.
Thank you folks!!!
If you open activities like this: A -> B -> C, and want to retrieve result in activity A from activity C you need to do next steps:
REQUEST_CODE
variable, e.g. const val REQUEST_CODE: Int = 400
startActivityForResult(intent, REQUEST_CODE)
;In activity A override onActivityResult()
method:
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)
}
}
In activity B start activity C using method startActivityForResult(intent, REQUEST_CODE)
;
In activity B override onActivityResult()
method:
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)
}
}
In activity C to pass data back to activity B:
val intent = Intent().apply {
putExtra("message", "This is the qty $scannedQTY")
}
setResult(Activity.RESULT_OK, intent)
finish()