Search code examples
androidkotlinonactivityresult

Get Result - Kotlin startActivityForResult does not deliver any result


Halllo, my BarcodeActivity is called by startActivityForResult through my PCActivity. The value of the scanned barcode should then be returned back to the PCActivity and inserted in a text field there. Unfortunately, I do not get a value back. However, the app does not crash either. Here is my code.

PCActivity:

sn_mb.setDrawableRightTouch {
        val intent = Intent(this@PCActivity, BarcodeActivity::class.java)
        startActivityForResult(intent, 1)
}

[...]

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == 1 && resultCode == Activity.RESULT_OK && data != null) {
        val returnedSN = intent.getStringExtra("return_sn")
        sn_mb.setText(returnedSN)
    } else {
        sn_mb.setText("FEHLER!")
    }
}

BarcodeActivity

saveBtn.setOnClickListener {
        val sn = editTextBarcode.text.toString()
        sn.toString()
        if (sn!= "") {
            val returnIntent:Intent = Intent()
            returnIntent.putExtra("return_sn", sn)
            setResult(Activity.RESULT_OK, returnIntent)
            finish()
        } else {
            Toast.makeText(
                applicationContext,
                "Das ist keine gültige Seriennummer",
                Toast.LENGTH_SHORT
            ).show()
        }
    }

I hope someone can explain or help me with this problem. Thank you very much.


Solution

  • The problem is you are not passing the scanned bar code value (sn) to the intent(returnIntent) in your BarCodeActivity.

    First make sure sn is String since you want to pass a StringExtra, therefore:

    val sn = editTextBarcode.text.toString()

    And then pass sn to your return intent:

    returnIntent.putExtra("return_sn", sn)

    Notice that in your code you are passing integer 1 instead of sn.

    EDIT: One more minor fix to your code, didn't notice it:

    val returnIntent:Intent = getIntent()

    Notice that it's getIntent() instead of Intent()