Android Room实现与后台线程处理查询

时间:2018-07-19 22:20:44

标签: java android

我最近正在尝试学习Android,并且对后端知识(例如,线程和东西。我弄清了Room并尝试将其与前端组件集成。因此,我不担心前端如何调整我要呈现的数据。我遇到了问题,因为我是新手,所以尝试使用线程以干净的方式设计和实现集成并尝试实现线程。

这是我的代码。

Database.class

@Database(entities = {Groups.class, Member.class}, version = 1, exportSchema 
= false)
public abstract class DatabaseConfig extends RoomDatabase {
    private static final String DATABASE_NAME = "db";
    private static DatabaseConfig INSTANCE;
    public abstract GroupDao groupDao();
    public abstract MemberDao memberDao();

    public static DatabaseConfig getDatabase(final Context context) {
        if (INSTANCE == null) {
            synchronized (DatabaseConfig.class) {
                if (INSTANCE == null) {
                    INSTANCE = 
                        Room.databaseBuilder(context.getApplicationContext(),
                            DatabaseConfig.class, DATABASE_NAME)
                            .addCallback(DatabaseCallBack)
                            .build();
                }
            }
        }
        return INSTANCE;
    }

    private static RoomDatabase.Callback DatabaseCallBack =
        new RoomDatabase.Callback(){

            @Override
            public void onOpen (@NonNull SupportSQLiteDatabase db){
                super.onOpen(db);
            }
        };
}

GroupRepo.class

public class GroupRepo {
    private final GroupDao groupDao;
    //ExecutorService es = Executors.newSingleThreadExecutor();

    public GroupRepo (Context context){
        DatabaseConfig db = DatabaseConfig.getDatabase(context);
        groupDao = db.groupDao();
    }

    public List<Groups> getAllGroups(){
        /*
          So my idea is to have some sort of threading implement from here
          and use executor.run() to run my query and capture data
         */
    }
}

Groups.class

@Dao
public interface GroupDao {
    @Query("SELECT * from groups")
    List<Groups> getAllGroups();

    @Query("Select * from groups where groups.id = :groupsId")
    GroupAllMembers getAllMember(int groupsId);

    @Insert
    void insert(Groups... groups);

    @Delete
    void delete(Groups groups);
}

我不会发布Entity类,因为我的意图不是这样。我是后台线程的新手。请提供帮助,并在理想情况下提供一些示例以帮助我理解。

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决此问题:如果您要在数据库上查询UI视图,我建议您将Day返回LiveData>,然后将其放在viewmodel中。所有这些内容都包含在Android文档中。

如果您正在服务中进行操作或不想与UI交互,只需执行以下操作:

Thread(Runnable() {
    @Override
    public void run() {
        // Do your stuff here with Room
    }
}).start()