SQLite跨两个Fragment取两张表数据时username返回null如何解决
问题根因定位
从你贴的日志可以直接看出问题:第二次构造传给Fragment的Bundle时,userName本身已经是null值,和SQLite操作完全无关,原因是你启动接收数据的Activity时,没有把之前拿到的userName参数带到新Activity的Intent里,导致从intent.getExtras()取userName的时候就为空。
可搜索的关键词
如果要自行检索解决方案,可以搜这几个关键词:
- Android Intent传值丢失
- Fragment setArguments空值
- Android 全局存储用户信息
解决方案
方案1:补全Intent传值逻辑
找到你启动当前接收数据的Activity的代码位置,在构造跳转Intent时,把已经获取到的userName也塞入Extras:
// 示例:在跳转前的页面写的启动代码 Intent intent = new Intent(当前页面.this, 接收数据的Activity.class); intent.putExtra("bookName", "نون والقلم"); intent.putExtra("status", "available"); // 新增这行,传递userName参数 intent.putExtra("userName", 你之前已经拿到的userName变量); startActivity(intent);
方案2:添加空值兜底逻辑
如果userName是登录后固定的用户信息,不需要每次传参,可以存在全局可访问的位置,取的时候加非空判断:
// 接收数据的Activity里修改取值逻辑 String bookUser = bundle.getString("userName"); if (bookUser == null) { // 示例:从SharedPreferences取之前存的登录用户名 SharedPreferences sp = getSharedPreferences("app_config", MODE_PRIVATE); bookUser = sp.getString("login_userName", "默认值"); }
方案3:跨页面公共数据存储
如果多个页面都需要用到userName这类公共数据,推荐两种更易维护的方案:
- 登录成功后就把用户名存入
SharedPreferences,所有页面都可以直接读取,不需要每次传参 - 使用Jetpack ViewModel,创建全局作用域的ViewModel存储公共数据,多个Activity/Fragment共用同一个实例取值
内容的提问来源于stack exchange,提问作者Mhb flh
相关产品推荐
相关产品推荐

