为什么我的 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。
我正在尝试将我的数据从 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。