我无法将对象添加到我的数据库,因为我无法在我的后台线程中初始化 Dao 对象。甚至 db.PetsDao() 也无济于事
I am unable to add objects to my database as I am not able to initialize the Dao object in my background thread . even db.PetsDao() isn't helping
当我 运行 代码时,我得到 petsDao 是一个空对象引用,如果我尝试 db.PetsDao() 初始化,它没有帮助。我是 android 的新手,请帮助我。
@Database(entities = {Pets.class},version = 1)
public abstract class PetsDatabase extends RoomDatabase {
private static PetsDatabase instance;
public abstract PetsDao petsDao();
public static synchronized PetsDatabase getInstance(Context context){
if (instance == null){
instance = Room.databaseBuilder(context.getApplicationContext(),
PetsDatabase.class,"Pets_Database")
.fallbackToDestructiveMigration()
.addCallback(roomCallback)
.build();
}
return instance;
}
//This method is to insert dummy data in the database when the database is first created
public static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback(){
@Override
public void onCreate(@NonNull @NotNull SupportSQLiteDatabase db) {
super.onCreate(db);
Runnable runnable = new Runnable() {
private PetsDao petsDao;
@Override
public void run() {
petsDao.insert(new Pets("Tommy","Terrier","Male"));
petsDao.insert(new Pets("Snoopy","Unknown","Male"));
}
};
Thread thread = new Thread(runnable);
thread.start();
}
};
}
调用 onCreate 时,数据库刚刚创建,Room 构建不完整(未完全实例化),因此您不能使用 Dao 的。
你需要使用 SupportSQLiteDatabase
methods. Such as insert
所以你会有这样的东西:-
ContentValues cv = new ContentValues();
cv.put("pet_name_column","Tommy");
cv.put("pet_breed_column","Terrier");
cv.put("pet_gender","Male");
db.insert("pets",SQLiteDatabase.CONFLICT_IGNORE,cv);
cv.clear();
.... and so on
- 请注意,pet_name_column 等列名仅表示需要的列名,并且该名称可能是。同样,table 名称 pets(插入的第一个参数)只是指示性的。
当我 运行 代码时,我得到 petsDao 是一个空对象引用,如果我尝试 db.PetsDao() 初始化,它没有帮助。我是 android 的新手,请帮助我。
@Database(entities = {Pets.class},version = 1)
public abstract class PetsDatabase extends RoomDatabase {
private static PetsDatabase instance;
public abstract PetsDao petsDao();
public static synchronized PetsDatabase getInstance(Context context){
if (instance == null){
instance = Room.databaseBuilder(context.getApplicationContext(),
PetsDatabase.class,"Pets_Database")
.fallbackToDestructiveMigration()
.addCallback(roomCallback)
.build();
}
return instance;
}
//This method is to insert dummy data in the database when the database is first created
public static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback(){
@Override
public void onCreate(@NonNull @NotNull SupportSQLiteDatabase db) {
super.onCreate(db);
Runnable runnable = new Runnable() {
private PetsDao petsDao;
@Override
public void run() {
petsDao.insert(new Pets("Tommy","Terrier","Male"));
petsDao.insert(new Pets("Snoopy","Unknown","Male"));
}
};
Thread thread = new Thread(runnable);
thread.start();
}
};
}
调用 onCreate 时,数据库刚刚创建,Room 构建不完整(未完全实例化),因此您不能使用 Dao 的。
你需要使用 SupportSQLiteDatabase
methods. Such as insert
所以你会有这样的东西:-
ContentValues cv = new ContentValues();
cv.put("pet_name_column","Tommy");
cv.put("pet_breed_column","Terrier");
cv.put("pet_gender","Male");
db.insert("pets",SQLiteDatabase.CONFLICT_IGNORE,cv);
cv.clear();
.... and so on
- 请注意,pet_name_column 等列名仅表示需要的列名,并且该名称可能是。同样,table 名称 pets(插入的第一个参数)只是指示性的。