首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

onActivityResult未传递requestCode

onActivityResult 是 Android 平台中的一个方法,用于处理从启动的 Activity 返回的结果。当一个 Activity 启动另一个 Activity 并期望得到结果时,会使用 startActivityForResult 方法。当被启动的 Activity 结束并返回结果时,会调用 onActivityResult 方法。

基础概念

  • requestCode: 当使用 startActivityForResult 启动一个 Activity 时,可以传递一个整数类型的 requestCode。这个码用于标识请求的来源,以便在 onActivityResult 中区分不同的结果。
  • resultCode: 被启动的 Activity 结束时,可以设置一个结果码(通常是 Activity.RESULT_OKActivity.RESULT_CANCELED),表示操作是否成功。
  • data: 可以通过 Intent 传递数据回原来的 Activity。

相关优势

  • 允许在多个 Activity 之间传递数据和控制流程。
  • 可以根据不同的 requestCode 处理不同的结果。

类型

  • 标准结果码: 如 Activity.RESULT_OKActivity.RESULT_CANCELED
  • 自定义结果码: 开发者可以根据需要定义自己的结果码。

应用场景

  • 用户登录验证。
  • 图片选择器返回选中的图片。
  • 数据编辑后返回更新的数据。

问题:onActivityResult未传递requestCode

如果 onActivityResult 未接收到 requestCode,可能是以下原因:

  1. 使用了新的 Activity Result API: 自 Android 11 (API 级别 30) 起,推荐使用新的 Activity Result API (registerForActivityResult) 替代传统的 startActivityForResult。如果你的应用目标 API 级别是 30 或以上,onActivityResult 将不会被调用。
  2. 启动 Activity 的方式不正确: 确保使用 startActivityForResult 方法启动 Activity,并且正确传递了 requestCode
  3. Activity 生命周期问题: 如果在 Activity 销毁并重新创建的情况下,可能会导致 onActivityResult 不被调用。确保在正确的生命周期方法中处理结果。

解决方法

  1. 检查 API 级别: 如果你的应用目标是 Android 11 或以上,应该使用新的 Activity Result API。以下是使用新 API 的示例代码:
代码语言:txt
复制
// 在 Activity 中注册
ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
    newActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == Activity.RESULT_OK) {
            Intent data = result.getData();
            // 处理返回的数据
        }
    });

// 启动 Activity
Intent intent = new Intent(this, AnotherActivity.class);
activityResultLauncher.launch(intent);

参考链接: Android 官方文档 - 使用 Activity Result API

  1. 确保使用 startActivityForResult: 如果你的应用目标 API 级别低于 30,确保使用 startActivityForResult 方法,并传递 requestCode
代码语言:txt
复制
Intent intent = new Intent(this, AnotherActivity.class);
int requestCode = 123; // 自定义请求码
startActivityForResult(intent, requestCode);
  1. 处理 Activity 生命周期: 确保在 onActivityResult 方法中正确处理结果,并且在 Activity 的生命周期方法中调用 super.onActivityResult(requestCode, resultCode, data)
代码语言:txt
复制
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 处理返回的结果
}

通过以上方法,可以解决 onActivityResult 未传递 requestCode 的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android 蓝牙4.0代码解析

    requestCode 和 resultCode都是返回提出请求的MainActivity结果处理函数onActivityResult()使用的标识,只是requestCode 主要用来标识是MainActivity...); 第一个参数:一个Intent对象 第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。...onActivityResult(int requestCode, int resultCode, Intent data) 第一个参数:这个整数requestCode提供给onActivityResult...在回掉函数onActivityResult(int requestCode, int resultCode, Intent data)中根据requestCode取不同的新窗体传过来的信息进行显示。...当调用bindService方法后就会回调Activity的onServiceConnected,在这个方法中会向Activity中传递一个IBinder的实例,Acitity需要保存这个实例。

    1.1K50

    Android-使用Intent传递数据

    向下一个活动传递数据 Intent不仅可以用来启动活动,还可以在启动活动的时候传递数据。...由于使用的是startActivityForResult()方法启动的SecondActivity的, 在被销毁之后会回调上一个活动的onActivityResult()方法,因此需要重写这个方法:...@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ switch(requestCode...()方法带有三个参数, 第一个参数requestCode,即我们启动活动的时候传入的请求码, 第二个参数resultCode,即我们返回数据时传入的处理结果, 第三个参数data,即携带着返回数据的Intent...由于在一个活动中有可能调用startActivityForResult()方法启动很多不同的活动, 每一个活动返回的数据都会回调onActivityResult()方法,因此需要先判断requestCode

    1.2K30

    Android使用Intent隐式实现页面跳转

    (int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode,...这里需要介绍几个知识点 Intent中提供了一系列putExtra()方法的重载,可以把我们想要的数据暂存在Intent中,在这里putExtra()接收了2个参数,第一个参数是键,第二个参数是是我们真正要传递的数据...接下来在看setResult()这个方法接收2个参数,第一个参数用于向上一个活动处理结果,一般只是用RESULT_OK或者RESULT_CANCELED两个值,第二个参数则把带有数据的Intent传递回去...(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode,...(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode,

    1K21
    领券