Android setResult与ActivityResult不匹配

Android setResult与ActivityResult不匹配,android,android-intent,Android,Android Intent,我正在开发一个包含两个活动的测验应用程序:一个是显示问题列表的QuizActivity,另一个是显示问题细节(提示、选项等)的QuestionActivity。在QuizActivity中,我使用startActivityForResult(Intent,int)方法打开QuestionActivity,如下所示: Intent questionIntent = new Intent(QuizActivity.this, QuestionActivity.class); questionInte

我正在开发一个包含两个活动的测验应用程序:一个是显示问题列表的
QuizActivity
,另一个是显示问题细节(提示、选项等)的
QuestionActivity
。在
QuizActivity
中,我使用
startActivityForResult(Intent,int)
方法打开
QuestionActivity
,如下所示:

Intent questionIntent = new Intent(QuizActivity.this, QuestionActivity.class);
questionIntent.putExtra("currentQuestion", currentQuestion);
startActivityForResult(questionIntent, REQUEST_CODE_SELECTED_OPTION);
其中,
REQUEST\u code\u SELECTED\u选项
是一个常量,设置为1

QuestionActivity
完成后,它应该返回所选选项的索引(假设它是一个多选问题),因此我覆盖了
onPause()
回调:

@Override
public void onPause() {
    super.onPause();
    Intent returnIntent = new Intent(QuestionActivity.this, QuizActivity.class);
    if (curQuestion.selected()) {
        returnIntent.putExtra("Result Code", RESULT_OK);
        setResult(Activity.RESULT_OK, returnIntent);
        Log.d("QuestionActivity", "Returned with " + Activity.RESULT_OK);
    } else {
        returnIntent.putExtra("Result Code", RESULT_CANCELED);
        setResult(Activity.RESULT_CANCELED, returnIntent);
        Log.d("QuestionActivity", "Returned with " + Activity.RESULT_CANCELED);
    }
}
我还在我的
QuizActivity
中实现了
onActivityResult(int,int,Intent)
回调:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("QuizActivity", "Received result code: " + resultCode);
    Log.d("QuizActivity", "Result code from intent: " + data.getIntExtra("Result Code", 100));
    if (requestCode == REQUEST_CODE_SELECTED_OPTION) {
        if(resultCode == Activity.RESULT_OK){
            Log.d("QuizActivity", "Got RESULT_OK");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            // do nothing
        }
    }
}
但是,当我运行应用程序时,输入
QuestionActivity
,选择一个选项,回击,从日志中我看到在
QuestionActivity
中,结果代码正确设置为-1:

D/QuestionActivity: Returned with -1
D/QuizActivity: Received result code: 0

但是在onActivityResult(int,int,Intent)方法中,结果代码是0。此外,我还尝试将
int
放在要传回的意图中,但在
QuizActivity
中,收到的意图是
null
。我真的很困惑。我使用的方法错了吗?

我发现了。根据这一点和Android文档,必须在活动完成之前调用
setResult(int,Intent)
方法(即在调用
onPause()
onStop()
onDestroy
之前)。我尝试将其放入
onBackPressed()中
但最初不起作用,因为我在第一行调用了
super.onBackPressed()
。最后,这起作用:

@Override
public void onBackPressed() {
    Intent returnIntent = new Intent(QuestionActivity.this, QuizActivity.class);
    if (curQuestion.selected()) {
        returnIntent.putExtra("Result Code", RESULT_OK);
        setResult(Activity.RESULT_OK, returnIntent);
        Log.d("QuestionActivity", "Returned with " + Activity.RESULT_OK);
    } else {
        returnIntent.putExtra("Result Code", RESULT_CANCELED);
        setResult(Activity.RESULT_CANCELED, returnIntent);
        Log.d("QuestionActivity", "Returned with " + Activity.RESULT_CANCELED);
    }
    super.onBackPressed();
}

在调用setResult()之前,您没有在Intent中设置数据,为什么需要在onPause而不是onBackPressed()中执行此操作?确保您是从活动本身调用
startActivityForResult
,而不是从
片段调用。因为如果您是从片段执行
startActivityForResult
,则将为片段调用
onActivityResult
。有关详细信息,请参阅。@AjayShrestha我还尝试在onBackPressed()中设置它但它也不起作用。@azizbekian我是从活动本身打电话来的