为什么我的 onActivityResult 块无法处理数据

Why My onActivityResult Block Can't Handle The Data

我正在尝试将我的数据从 Activity 获取到 Fragment,但无法做到我认为 requestCodes 和 resultCodes 有问题,但找不到。我做了一些研究,但答案对我没有帮助。

片段中我的伴生对象

companion object {
    const val REQUEST_PERMISSION = 1001
    const val REQUEST_MULTIPLE_PERMISSION = 1002
    const val REQUEST_TO_POST = 1003
}

片段到 activity

view.testButton.setOnClickListener {
        val intent = Intent (activity, ReaderActivity::class.java)
        startActivityForResult(intent,101)
    }

Activity 到片段

card_results = result;
    Log.d(TAG, "ResultActivity data is :" + result);
    Intent returnIntent = new Intent();
    returnIntent.putExtra("cardResult", card_results );
    setResult(Activity.RESULT_OK, returnIntent);
    finish();

处理数据的片段函数

 private fun getDataFromNFC(intent: Intent){
    Log.d(TAG, "getDataFromNFC: start")
    try {
        val result:String = intent.getStringExtra("cardResult").toString()
        Log.d(TAG, "getDataFromNFC data is : $result")
    }catch (e: NullPointerException){
        Log.d(TAG, "error: $e")
        Toast.makeText(activity,"Add a card",Toast.LENGTH_SHORT).show()
    }
    Log.d(TAG, "getDataFromNFC: ends")
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    Log.d(TAG, "onActivityResult: start")
    if (requestCode == 101) {
        when (requestCode) {
            REQUEST_PERMISSION -> {
                if (data != null) {
                    getDataFromNFC(data)
                }
            }
            REQUEST_MULTIPLE_PERMISSION -> {
                // Do something if success / failed
            }
            REQUEST_TO_POST -> {
                // Parse result and do something
            }
        }
    }
    super.onActivityResult(requestCode, resultCode, data)
    Log.d(TAG, "onActivityResult: ends")
}

当您使用此代码时,您使用的唯一请求代码是 101:startActivityForResult(intent,101)

然后在 onActivityResult 中,您首先检查请求代码是否为 101,这很好,但是您有一个 when(requestCode) 块,它仅在请求代码不是 101 时才执行操作,对于任何这些情况都不会成立,尤其是在已经保证请求代码为 101 的 if-block 中。

此外,应该注意 startActivityForResult() 现在已弃用,取而代之的是 Activity Result APIs