我的应用程序中有一个简单的Room实现。它有两个实体。当应用程序运行时,它可以正常工作。但是一旦应用程序重新启动,我就看不到任何数据。
这是我的数据库创建代码 -
@Database(entities = {Person.class, College.class}, version = 1, exportSchema = true)
public abstract class AppDatabase extends RoomDatabase {
private static AppdDatabase INSTANCE;
public abstract PersonDao personDao();
public abstract CollegeDao collgeDao();
public static AppDatabase getInstance(Context context) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my-sample-app.db")
.build();
}
return INSTANCE;
}
public static void destroyInstance() {
if (INSTANCE != null) INSTANCE.close();
INSTANCE = null;
}
}
在任何正在运行的会话中,我可以添加和查看数据,但在应用程序重新启动后没有任何可用。我在这里错过了什么?
谢谢
每次重新启动应用程序时都有一个空数据库的原因是,在您的数据库类中您使用了"Room.inMemoryDatabaseBuilder...",它仅用于在数据库上进行测试,因此您应该使用"Room.databaseBuilder.."
愚蠢的错误——
我没有使用有问题的getInstance((,而是使用以下代码来创建数据库 -
mDb = Room.inMemoryDatabaseBuilder(mContext, AppDatabase.class)
我的代码按预期工作,原始代码发布有问题。
谢谢
您在下面使用了代码,我认为您的问题将得到解决..使数据库像下面的代码一样..
@Database(entities = {MyTable.class}, version = 1)
公共抽象类 AppDatabase 扩展 RoomDatabase { 公共摘要 MyTableDao getTableDao((;}
然后在制作道界面后..
@Dao
公共接口 MyTableDao { @Insert void insertData(MyTable myTable(;
}
并制作您的pojo类
@Entity
公共类 MyTable { @PrimaryKey(自动生成 = 真( 私人 int ID;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private double ItemPrice;
public double getItemPrice() {
return ItemPrice;
}
public void setItemPrice(double itemPrice) {
ItemPrice = itemPrice;
}
}
比之后创建一个应用活动类并在应用程序级别调用。
public class AppActivity extends Application {
静态应用数据库数据库;
@Override
public void onCreate() {
super.onCreate();
db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
}
public static AppDatabase getDatabase() {
return db;
}
}
上述在应用程序标记的清单文件中声明的活动类。
android:name=".AppActivity"
然后之后用于插入这样的主要活动..
AppActivity.getDatabase().getTableDao().insertData(yourobject);
检查我的代码,但可能对你有用。试试这个:
@Database(entities = {Person.class, College.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
private static AppdDatabase INSTANCE;
public abstract PersonDao personDao();
public abstract CollegeDao collgeDao();
public static AppDatabase getInstance(final Context context) {
if (INSTANCE == null) {
synchronized (AppDatabase.class) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "my_sample_app")
.build();
}
}
return INSTANCE;
}
public static void destroyInstance() {
if (INSTANCE != null) INSTANCE.close();
INSTANCE = null;
}
}