如何在MVVM Architechture上使用Room查询Android存储库类中的内容?

问题描述

我在下面有此存储库代码,此外,我还希望具有通过查询数据库来返回购物车商品的功能(这里我使用过Room),以便它返回:从购物车中选择*,其中cartId = {{id }}

如何在AsyncTask上编写函数并从那里返回值?

存储库类:

environment

我的DAO课:

docker-compose.yml

解决方法

 private class SelectCartAsyncTask extends AsyncTask<Integer,Void,Cart> {

     protected Cart doInBackground(Integer...ids) {
         // get item from database in background thread
         return cartDao.getItemById(ids[0]);
     }

     protected void onPostExecute(Cart result) {
         // do smth with result on main thread
     }
 }

该类已在API级别30中弃用。 请改用标准的java.util.concurrent或Kotlin并发实用程序。

https://developer.android.com/reference/android/os/AsyncTask上查看更多信息

更新

 private static class SelectCartAsyncTask extends AsyncTask<Integer,Cart> {

        private final Consumer<Cart> callback;
        private final CartDao cartDao;

        public SelectCartAsyncTask(CartDao cartDao,Consumer<Cart> callback) {
            this.callback = callback;
            this.cartDao = cartDao;
        }

        protected Cart doInBackground(Integer... ids) {
            // get item from database in background thread
            return cartDao.getItemById(ids[0]);
        }

        protected void onPostExecute(Cart result) {
            callback.accept(result);
        }
    }

以及您的活动

new SelectCartAsyncTask(getCartDao(),result -> {
            // do smth with result in activity
        }).execute(1);

如果您不使用Java8,请选中https://stackoverflow.com/a/12575319/5783522