You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Activity与Java Activity之间如何通过onActivityResult传递数据?

Java Activity 向 Kotlin Activity 传递数据可行性及修复方案

可行性结论

该操作完全可以实现。Android 系统的 Intent 通信机制不区分 Activity 的实现语言,Java 和 Kotlin 编译后均运行在 Android 虚拟机上,二者组件通信完全兼容。

现有代码问题

你当前代码无法正常获取数据的核心原因是 Intent Extra 键不匹配:

  • Kotlin 端读取数据时使用的键是 manualActivity.EXTRA_REPLY
  • Java 端写入数据时使用的键是硬编码字符串 "name"
    键值不一致导致 Kotlin 端读取结果为空,后续逻辑不会执行。

修复方案

统一两端的 Extra 键即可,推荐使用全局常量避免硬编码出错,以下二选一即可:

方案1:Java 端使用 Kotlin 侧定义的常量

如果 manualActivity.EXTRA_REPLY 是 Kotlin 类中定义的公开常量,Java 端修改代码如下:

Intent resultIntent = new Intent();
// 替换硬编码的"name",使用和Kotlin端一致的键
resultIntent.putExtra(manualActivity.Companion.getEXTRA_REPLY(), name);
setResult(RESULT_OK, resultIntent);
finish();

方案2:Kotlin 端使用 Java 侧的键

如果要沿用Java端的"name"作为键,修改Kotlin端取值代码即可:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == newFriendActivityRequestCode && resultCode == Activity.RESULT_OK) {
        // 替换为和Java端一致的键"name"
        data?.getStringExtra("name")?.let {
            val friendViewModel: FriendViewModel by viewModels {
                FriendViewModelFactory((application as FriendsApplication).repository)
            }
            val friend = Friend(1, it)
            friendViewModel.insert(friend)
        }
    }
}

内容的提问来源于stack exchange,提问作者ponylama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:57:01