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

Temi机器人Android平台Room DAO插入数据失效问题求解

问题核心原因

你插入失败是AudioFile实体类的主键配置错误导致的:

  • 你给audioFileID加了@PrimaryKey注解但没有开启自增,构造函数也没有给该字段赋值,所有新建的AudioFile实例的audioFileID都是int类型的默认值0
  • 你的插入策略配置为OnConflictStrategy.IGNORE,第一次插入主键0成功后,后续所有插入都会因为主键冲突被直接静默忽略,自然看不到新条目入库。

修复方案

  1. 调整AudioFile实体类的主键配置,开启自增:
@Entity
public class AudioFile {
    // 加上autoGenerate = true,让Room自动生成唯一主键
    @PrimaryKey(autoGenerate = true)
    private int audioFileID;

    private String uriPath;
    private String name;

    public AudioFile(String uriPath, String name) {
        this.setUriPath(uriPath);
        this.name = name;
    }

    // 原有getter、setter逻辑全部保留即可
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAudioFileID() {
        return audioFileID;
    }

    public void setAudioFileID(int audioFileID) {
        this.audioFileID = audioFileID;
    }

    public String getUriPath() {
        return uriPath;
    }

    public void setUriPath(String uriPath) {
        this.uriPath = uriPath;
    }
}
  1. (可选)修改DAO的insert方法返回值,方便快速排查插入结果:
@Insert(entity = AudioFile.class,onConflict = OnConflictStrategy.IGNORE)
// 返回值为插入成功的行ID,返回-1代表插入失败(通常是主键冲突导致)
Long insert(AudioFile audioFile);

插入后打印返回值即可快速确认插入是否成功。


额外优化建议

你现有代码里的while (!future.isDone()){}是在主线程空转阻塞,不符合Android开发规范,建议把UI更新逻辑移到异步任务末尾,切主线程执行:

var future = TemiPatrolRoomDatabase.databaseWriteExecutor.submit(() -> {
    Log.d(TAG, "audio name to be inserted:"+audioFile.getName());
    Long insertResult = temiPatrolDAO.insert(audioFile);
    Log.d(TAG, "insert result: " + insertResult);
    var a = (ArrayList<AudioFile>) temiPatrolDAO.getAll();
    Log.d(TAG, "after insertion");
    for (var a1 : a) {
        Log.d(TAG, "file name:" + a1.getName());
    }
    // 切主线程更新UI
    requireActivity().runOnUiThread(() -> {
        audioFiles.add(audioFile);
        customAdapter.notifyDataSetChanged();
    });
});

删掉原来的空转while循环和外部的UI更新代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:57:02