我有一个Android应用,该应用使用Room来处理数据库。在onViewCreated的片段之一中,我使用简单查询SELECT * FROM table WHERE id = ?
从数据库中获取了一个对象。查询的ID被存储在Fragment的参数Bundle中。它工作正常,但是当我更改方向并由系统重新创建片段时,同一查询返回null,并且我无法从应用程序中的任何其他查询获取此条目。
我已经检查了id,它在方向改变后不会消失,并且我已经使用调试器拦截了对数据库的所有查询,只有SELECT查询,没有DELETE,UPDATE或INSERT
UPD:代码
片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_lesson_client, container, false);
ButterKnife.bind(this, view);
lesson = App.Companion.getDb().lessonDao().getLesson(getArguments().getLong("lesson"));
DAO
@Query("SELECT * FROM Lesson WHERE id == :id")
fun getLesson(id: Long): Lesson?
答案 0 :(得分:1)
好的,首先我的问题是Room中没有@Upsert
批注,而我只是假设@Insert(onConflict = OnConflictStrategy.REPLACE)
做的是同一件事,但事实并非如此。它实际上不删除条目而是插入新条目,而不是更新条目。碰巧的是,在我的片段中有一个TextWatcher
连接到文本字段,该字段在条目上执行了上述插入操作,而该条目由问题中消失的条目使用FOREIGN KEY ON DELETE CASCADE
进行了引用。在方向更改期间,TextWatcher
触发了一个事件,插入过程中该条目的删除实际上是级联的,并删除了所有引用该条目的条目,这导致了问题