我试图在java中实现用于持久数据存储的Room。但是我遇到了问题。
在第一次尝试中:
MyDao.java
@Dao
public interface MyDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void addUser(UserDetails userDetails);
}
我的数据库.java
@Database(entities = {User.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
public abstract MyDao myDao();
}
上面的应用程序崩溃并出现错误:
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
每当我尝试将数据插入数据库时。
在第二次尝试中:
MyDao.java
@Dao
public interface MyDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
ListenableFuture<Integer> addUser(UserDetails userDetails);
}
我的数据库.java
@Database(entities = {User.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
public abstract MyDao myDao();
}
将返回类型更改为保持ListenableFuture<Integer>
,因为官方文档说要这样做。该应用程序未成功构建并显示以下错误:
error: Not sure how to handle insert method's return type.
所以,我的问题是如何使用带有 java 的 room 正确并成功地将数据插入数据库中。
请帮忙。