Android中intent.putExtra传值Fragment正常但Activity取null如何解决
问题定位
你的数据库层代码没有任何问题,参数获取为空完全是Intent传参逻辑错误导致的:
- 你在
MainActivity中虽然创建了指向AddModifyTask的intent1,并通过putExtra存入了account参数,但你从未执行startActivity(intent1),这个携带参数的Intent根本没有被用来启动页面,创建后就被系统回收了。 - 你实际登录后只启动了
HomeActivity,你给启动HomeActivity的Intent存入了account参数,所以挂载在HomeActivity上的Fragment调用getActivity().getIntent().getStringExtra("account")时,拿到的是HomeActivity绑定的Intent里的参数,自然能取到正确值。 - 你的
AddModifyTask不是从MainActivity直接启动的,应该是后续从HomeActivity中跳转打开的,而你跳转时没有给启动AddModifyTask的Intent存入account参数,所以在AddModifyTask里调用getIntent().getStringExtra("account")必然返回null。
修复方法
二选一即可,优先选第一种,改动最小:
方案1:跳转AddModifyTask时补传参数
在HomeActivity中启动AddModifyTask的位置,把HomeActivity收到的account参数透传过去:
// HomeActivity中跳转AddModifyTask的代码处 Intent addTaskIntent = new Intent(HomeActivity.this, AddModifyTask.class); addTaskIntent.putExtra("account", getIntent().getStringExtra("account")); startActivity(addTaskIntent);
你现有AddModifyTask里的取值逻辑不需要做任何修改,就能正常获取到account值。
方案2:用本地存储持久化账号参数(适合多页面复用账号信息的场景)
如果后续多个页面都需要用到账号信息,层层通过Intent传参比较繁琐,可以在登录成功后把account存入SharedPreferences,所有页面直接从本地读取即可,不需要依赖Intent传参:
- 登录成功后存入参数:
// MainActivity登录校验通过的位置 SharedPreferences userSp = getSharedPreferences("user_info", MODE_PRIVATE); userSp.edit().putString("account", account).apply();
- 任意页面需要account时直接读取:
SharedPreferences userSp = getSharedPreferences("user_info", MODE_PRIVATE); String account = userSp.getString("account", "");
额外代码问题
你贴出的FragmentonCreateView代码有括号匹配错误,给文本赋值的代码块多了一个闭合大括号,会导致编译失败,修正后代码如下:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_profile, container, false); TextView textViewAccount = v.findViewById(R.id.textViewAccount); String account = getActivity().getIntent().getStringExtra("account"); textViewAccount.setText(account); return v; }
内容的提问来源于stack exchange,提问作者Bùi Minh Thương
相关产品推荐
相关产品推荐

