![](/img/trans.png)
[英]I cannot enter data and query the database DAO in android studio
[英]I can't store values in the database DAO android
嗨,我無法在數據庫 DAO android 中存儲值。 我有 User.class:
public class User {
@PrimaryKey @NonNull
public String uid;
@ColumnInfo(name="name")
public String name;
public User(String uid, String name){
this.uid=uid;
this.name=name;
}
}
DAO 數據庫:
@Dao
public interface UserDAO {
@Query("select*from User")
List<User> getAll();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(User users);
}
我的數據庫類是:
@Database(entities = {User.class},version=1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDAO userDAO();
}
我的代碼
new Thread(new Runnable() {
@Override
public void run() {
try {
AppDatabase db = Room.databaseBuilder(activity.getApplicationContext(),
AppDatabase.class, "user_db").build();
UserDAO userDao = db.userDAO();
userDao.insertAll(new User("11","Melany"));
Log.d("main_activity_uid",
"ok you are pretty");
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
現在我的代碼不存儲新用戶(我不能打印“好的,你很漂亮”)。為什么? 我還有一個問題:我知道當您將數據存儲在數據庫中時,您使用線程,但是線程允許您做什么?
一個問題是您總是在一個新的數據庫實例中創建而不是擁有一個單例數據庫。
單實例( 來源):
private static volatile WordRoomDatabase INSTANCE;
static WordRoomDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (WordRoomDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
WordRoomDatabase.class, "word_database")
.build();
}
}
}
return INSTANCE;
}
您需要一個線程,因為Room
數據庫不允許在主線程上進行操作以防止阻塞 UI( 來源)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.