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

时间:2018-03-16 09:29:43

标签: android android-room

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

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

由于

4 个答案:

答案 0 :(得分:1)

这是一个愚蠢的错误 -

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

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

我的代码按照预定的原始代码工作。

由于

答案 1 :(得分:1)

每次重新启动应用程序时都有一个空数据库的原因是因为在数据库类中您使用了“ Room.inMemoryDatabaseBuilder ..”,该属性仅用于对db进行测试,因此应使用“ Room。 databaseBuilder ..

答案 2 :(得分:0)

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

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

}

答案 3 :(得分:0)

您使用以下代码,我认为您的问题将得到解决.. 制作数据库,如下面的代码..

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

公共抽象类AppDatabase扩展RoomDatabase {     public abstract MyTableDao getTableDao(); }

然后在make dao界面之后..

@Dao

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

}

并制作你的pojo课程

@Entity

公共类MyTable {     @PrimaryKey(autoGenerate = true)     private 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 {

static AppDatabase db;

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