重新启动应用后,房间数据将丢失



我的应用程序中有一个简单的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;
    }
}

最新更新