当前位置: 首页 > 知识库问答 >
问题:

Android setResult与onActivityResult不匹配

田兴旺
2023-03-14

我正在开发一个包含两个活动的问答应用程序:一个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_code_selected_option是设置为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。我真的很困惑。我用错方法了吗?

共有1个答案

庞意智
2023-03-14

我想出来了。根据这篇文章和Android文档,必须在活动完成之前(即在调用onpause()onstop()ondestroy之前)调用setResult(int,Intent)方法。我尝试将它放入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();
}
 类似资料:
  • 我有一个选择一个图像的意图(我在一个片段中这样称呼它): 在我的活动中: 输出:OnActivityResult:请求代码:66084 OnActivityResult:Result:-1成功=true 正如您所看到的,结果是成功的,但请求代码发生了更改。所以我无法查证是什么请求。

  • 我正试图拍摄一张照片并将照片发送到服务器,但目前我没有进入onActivityResult,也不知道发生了什么 代码如下: 我可以预览相机,但在android照片上的点击没有击中activiyt结果上的log.d,有什么提示吗? logcat:

  • 我是一个新的android和有以下查询。 我正在建立一个应用程序,其中包含两个活动第一和第二,发送消息给对方。“第一个”向“第二个”发送消息,然后“第二个”启动,显示接收到的消息,并向“第一个”发回消息。最后,首先显示收到的消息。 在第一个活动中,我必须使用startActivityForResult启动第二个活动,因为我需要返回响应。 谢了! PS-我已经尝试删除语句-if(resultCode

  • 这是我的onActivityResult方法:-

  • 我想在共享托管服务器中安装php依赖项,但是作曲家说我的php版本是(对我的依赖项来说太旧了),这是真的,所以我用一个叫做"MultiPHP管理器”。好吧,直到我重试运行,作曲家一直说我的php版本是。 然后我在一个虚拟页面中检查了,它说我的版本是。我还运行了,结果显示我的版本是。 我试过了 重新加载 运行和但它说已禁用,但我使用名为“MultiHP INI编辑器”的cpanel工具启用了它,说已

  • 我的密码应类似于: “密码应包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,长度至少为八个字符” 我使用的模式是: