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

向Activity传递字符串后,在其Fragment中获取值为空的问题

问题根源分析

你遇到的问题核心在于你手动创建了一个全新的RegistrationActivity实例,而不是获取系统已经启动并绑定到Fragment的那个Activity对象。

当你执行val activity = RegistrationActivity()时,这个新的Activity实例完全没有经过Android系统的生命周期流程——它的onCreate方法根本没被调用,所以mobile变量始终是初始化时的空字符串"",自然调用getMobile()会返回空值。

正确解决方案

这里有两种靠谱的解决方式,根据你的需求选择:

方式一:获取Fragment绑定的Activity实例

在Fragment中,Android系统已经帮你关联了对应的Activity,你只需要获取这个已存在的实例即可:

// 在你的Fragment中
val registrationActivity = requireActivity() as RegistrationActivity
val mobile = registrationActivity.getMobile()

注意:使用requireActivity()可以确保Activity非空,如果Fragment还没绑定Activity,会抛出异常;如果想更安全,也可以用getActivity()?.let { ... }做空判断。

方式二:Fragment直接读取Intent数据

既然数据是通过Intent传递到Activity的,Fragment也可以直接从Activity的Intent中读取,不需要借助Activity的方法:

// 在你的Fragment的onViewCreated或onActivityCreated方法中
val mobile = requireActivity().intent.extras?.getString("mobile") ?: ""
// 这里用空合并运算符处理空值,避免NullPointerException
额外优化建议

另外,你的Activity代码里有个潜在的空安全问题:getMobile()方法中使用了mobile!!,如果mobile是null(比如Intent里没有传这个值),会直接崩溃。建议修改为更安全的写法:

fun getMobile(): String {
    return mobile ?: ""
}

这样即使mobile为null,也会返回空字符串,避免崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:12:50