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
相关产品推荐
相关产品推荐

