Android - 使用 Room 从 SQLite 获取单个对象

Android - Get a single object from SQLite using Room

我正在开发我的第一个应用程序,我可以在 SQ Lite 数据库中添加、编辑、删除...对象。 到目前为止一切正常。还可以使用 LiveData 加载所有存储的对象。

当我想从我的数据库加载单个对象时,任何人都可以建议我,存储库中的代码应该是什么样子?

Dao 中的代码如下所示:

@Query("SELECT * FROM lens_table WHERE id = :lensId LIMIT 1")
Lens getLensById(int lensId);

我在存储库中尝试使用像这样的简单代码:

public Lens getLensById(int id) {
    Lens lens = lensDao.getLensById(id);
}

但这不起作用 - 我认为问题是这应该在异步任务中完成,因为我用它来删除项目。

public void delete(Lens lens) {
    new DeleteLensAsyncTask(lensDao).execute(lens);
}

private static class DeleteLensAsyncTask extends AsyncTask<Lens, Void, Void> {
    private final LensDao lensDao;

    private DeleteLensAsyncTask(LensDao lensDao) {
        this.lensDao = lensDao;
    }

    @Override
    protected Void doInBackground(Lens... lenses) {
        lensDao.delete(lenses[0]);
        return null;
    }
} 

这就是我开始纠结的地方 - 存储库中的方法应该是什么样子?

在 activity 中,分别在 ViewHolder 中,我正在使用从 activity.

的 onCreate 方法调用的代码
public Lens getLensById(int id) {
    return repository.getLensById(id);
}

非常感谢!

界面

@Query("SELECT * FROM lens_table WHERE id = :lensId LIMIT 1")
LiveData<Lens> getLensById(int lensId);

回购

public LiveData<Lens> getLensById(int id) {
    return lensDao.getLensById(id);
}

视图模型

public LiveData<Lens> getLensById(int id){
    return repo.getLendsById(id)
}

Activity

viewModel.getLensById(id = ).observe(this,new Observer{
    @Override 
    void onChanged(Lens lens){
        //TODO()
    }
})