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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:39:02