Flutter使用Hive数据库出现unknown typeId: 32未注册适配器报错求助
Hive
unknown typeId: 32 错误排查方案 核心原因
报错提示的typeId 32和你注册的Tasks模型typeId=1不匹配,问题并非出在适配器注册逻辑本身,而是本地持久化的Hive数据存在冲突。
排查步骤
旧Box缓存冲突(概率最高)
你之前调试过程中大概率向TheListBox中存入过其他typeId=32的自定义模型,或者修改过模型的typeId后未清理本地缓存,Hive读取旧数据时找不到对应适配器就会抛出该错误。
临时解决方法:在打开Box前先删除本地旧缓存,测试正常后可删除该行代码:Hive.registerAdapter(TasksAdapter()); // 新增该行清理旧数据 await Hive.deleteBoxFromDisk("TheList"); await Hive.openBox<Tasks>("TheList");也可以直接卸载应用重装,彻底清理本地Hive存储。
其他Box未适配
检查项目中所有Hive.openBox()调用,确认你是否打开了其他存储自定义模型的Box,且对应模型的适配器未完成注册,所有用到的自定义Hive模型都需要提前调用Hive.registerAdapter()注册。未重新生成适配器
如果你修改过@HiveType注解的typeId值后未重新执行构建命令,会导致生成的适配器和模型注解的typeId不匹配,执行以下命令重新生成适配器即可:flutter packages pub run build_runner build --delete-conflicting-outputsBox存入非指定类型数据
确认你操作TheListBox时,仅存入Tasks类型的实例,如果不小心存入了其他未注册适配器的自定义模型,也会触发该错误。
验证方法
你可以尝试打开一个全新命名的Box测试,如果操作新Box无报错,即可100%确认是旧Box缓存冲突导致的问题:
await Hive.openBox<Tasks>("test_empty_box");
内容的提问来源于stack exchange,提问作者Sagar Yadav
相关产品推荐
相关产品推荐

