我的应用重启后房间数据丢失

Room data is lost after my app is restarted

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

在任何 运行 会话中,我可以添加和查看数据,但在应用程序重启后没有任何内容可用。我在这里错过了什么?

谢谢

我没有检查我的代码,但它可能对你有用。试试这个:

@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;
    }

}

你使用了下面的代码,我认为你的问题会得到解决.. 使数据库像下面的代码..

@Database(entities = {MyTable.class}, version = 1)

public 摘要 class AppDatabase 扩展 RoomDatabase { public 抽象 MyTableDao getTableDao(); }

然后在make dao接口之后..

@Dao

public 接口 MyTableDao { @插入 void insertData(MyTable myTable);

}

制作你的 pojo class

@Entity

publicclass我的表格{ @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;
}

}

比制作一个应用程序 activity class 并在应用程序级别调用。

public class AppActivity extends Application {

静态 AppDatabase 数据库;

@Override
public void onCreate() {
    super.onCreate();
    db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build();
}

public static AppDatabase getDatabase() {
    return db;
}

}

以上 activity class 在应用程序标签的清单文件中声明。

        android:name=".AppActivity"

然后像这样在主activity中插入之后..

        AppActivity.getDatabase().getTableDao().insertData(yourobject);

这是一个愚蠢的错误-

我没有使用有问题的 getInstance(),我使用下面的代码创建数据库 -

mDb = Room.inMemoryDatabaseBuilder(mContext, AppDatabase.class)

我的代码与有问题的原始代码一起工作。

谢谢

你每次重启应用程序时都有一个空数据库的原因是因为在你的数据库class中你使用了"Room.inMemoryDatabaseBuilder..",它仅用于数据库的测试目的,所以你应该使用 "Room.databaseBuilder.."