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

无法将Room数据库数据加载至Spinner:GitHub API数据存储后无展示

问题分析与解决方案

嘿,我帮你找到了问题的核心所在,还有对应的修复方案:

1. 最关键的问题:数据库名称不匹配

你在Splash和Home两个页面里初始化Room数据库时,用了不同的数据库名称,这直接导致Home读取的是一个全新的空数据库,自然加载不到任何数据。

看一下代码对比:

  • 在Splash.java里,你给数据库命名为"MyDao":
myAppDatabase = Room.databaseBuilder(getApplicationContext(), MyAppDatabase.class, "MyDao").allowMainThreadQueries().build();
  • 但在Home.java里,数据库名称变成了"UsersDb":
myAppDatabase = Room.databaseBuilder(getApplicationContext(), MyAppDatabase.class,"UsersDb").allowMainThreadQueries().build();

Room会根据名称创建独立的数据库文件,所以这两个是完全分开的库。你需要把它们改成相同的名称,比如统一用"UsersDatabase":

修改Splash中的初始化代码:

myAppDatabase = Room.databaseBuilder(getApplicationContext(), MyAppDatabase.class, "UsersDatabase").allowMainThreadQueries().build();

修改Home中的初始化代码:

myAppDatabase = Room.databaseBuilder(getApplicationContext(), MyAppDatabase.class,"UsersDatabase").allowMainThreadQueries().build();

2. 额外的优化建议(可选但推荐)

  • 别在主线程操作数据库:虽然allowMainThreadQueries()暂时能运行,但实际项目中容易触发ANR(应用无响应)。建议改用异步方式,比如让Dao返回LiveData:
    // MyDao.java修改
    @Query("SELECT * FROM Users")
    LiveData<List<Users>> getUsers();
    
    然后在Home中观察数据变化,自动更新Spinner:
    // Home.java的putData方法替换成
    myAppDatabase.myDao().getUsers().observe(this, usersList -> {
        userType.clear();
        userType.add("Select UserType");
        for(Users user : usersList){
            userType.add(user.getType());
            Log.e("DistNames",user.getType());
        }
        spinner.setAdapter(new ArrayAdapter<>(Home.this, android.R.layout.simple_spinner_dropdown_item, userType));
    });
    
  • 确认数据插入成功:可以在Splash的onResponse末尾加一行日志,验证插入的数据量:
    Log.e("插入的数据总数", String.valueOf(myAppDatabase.myDao().getUsers().size()));
    

3. 验证步骤

  1. 先卸载当前应用(清除旧的数据库文件)
  2. 重新运行应用,等待Splash完成数据加载
  3. 跳转到Home后,查看Spinner是否正常显示用户类型选项

内容的提问来源于stack exchange,提问作者Raj Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:12:42