Android - 异步访问Room数据库的最佳方式

时间:2018-03-22 02:52:14

标签: android android-asynctask intentservice android-room

所以我有一个Room数据库,其中存储了一些用户。这是我用来访问数据库并获取数据的当前方法。

{{1}}

我的问题是有更好的方法来做到这一点。我在我的活动代码中做了所有这些,我想清理它。

你将如何实现类似静态或抽象类的东西,它具有对主线程/活动的回调,因此我可以监听响应。我还是异步任务的新手,所以如果我是愚蠢的话,我会道歉。

我还需要能够从始终运行的服务访问数据库。此外,我有时需要在调用OnDestroy()方法时保存一些数据,如果我从那里运行一个线程,则会导致崩溃。也许像IntentService这样的东西?但我需要能够调用不同的方法来获取和保存不同的对象。

1 个答案:

答案 0 :(得分:-2)

在AppDatabase类中,您必须使用以下代码:

@Database(entities = {User.class},version = 1)
public abstract class AppDatabase extends RoomDatabase
{
     public abstract  userDAO userDao();
}

在UserDAo类中,您必须使用以下代码:

@Query("select * from User where user =:search")
User getUser(String search);

要使用这些方法,可以使用以下代码:

User user;
public static AppDatabase database=null;
if (database==null)
    {
        database= Room.databaseBuilder(getApplicationContext(),AppDatabase.class,"nameOfDatabase")
                .allowMainThreadQueries().build();
    }
user=database.userDao.getUser("testuser1");