问题描述
我在下面有此存储库代码,此外,我还希望具有通过查询数据库来返回购物车商品的功能(这里我使用过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