如何在Room中调用应用程序getDatabase

时间:2017-12-21 19:34:57

标签: android sqlite android-room

我从这里下载了Room BasicSample应用程序: https://github.com/googlesamples/android-architecture-components

此示例是只读数据库。没有插入单个实体的示例。我正在修改它,并努力弄清楚如何调用getDatabase,以便我可以在按钮单击上对数据库执行简单的插入 -  getDatabase()。wordDao()。insert(...)?

如何访问单例BasicApp并调用getDatabase方法,以及从何处调用它?

感谢任何帮助。

单个插入

@Insert(onConflict = IGNORE)
void insert(WordEntity word);

AppDatabase.java (不确定此插入方法是否在此处)

private static void insert(final AppDatabase database, final WordEntity word) {
        database.wordDao().insert(word);
}

BasicApp.java

public class BasicApp extends Application {

    private AppExecutors mAppExecutors;

    @Override
    public void onCreate() {
        super.onCreate();

        mAppExecutors = new AppExecutors();
    }

    public AppDatabase getDatabase() {
        return AppDatabase.getInstance(this, mAppExecutors);
    } // ==> how do I get access to this?

    public DataRepository getRepository() {
        return DataRepository.getInstance(getDatabase());
    }
}

2 个答案:

答案 0 :(得分:1)

如果您从某项活动或服务访问BasicApp课程,则只需致电((BasicApp)getApplication()).getDatabase()

答案 1 :(得分:1)

取决于你在哪个班级。

如果它是一个活动方法(如onCreate):

BasicApp basicApp = (BasicApp) this.getApplicationContext();
AppDatabase appDatabase = basicApp.getDatabase();
//... do work here

如果您只有一个视图(例如在onClickListener中将视图作为arg传递):

BasicApp basicApp = (BasicApp) view.getContext().getApplicationContext();
AppDatabase appDatabase = basicApp.getDatabase();
//... do work here