如何使用asynctask如何调用它以及如何为整个应用程序创建db示例?

busg9geu  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(355)

我有一个名为dbasynctask的类,它使用asynctask,这是一个非擦写的类,那么我应该如何做呢。

  1. class DBAsyncTask(val context: Context, val restaurantEntity: RestaurantEntity, val mode: Int) :
  2. AsyncTask<Void, Void, Boolean>() {
  3. val db = Room.databaseBuilder(context, RestaurantDatabase::class.java, "restaurant-db").build()
  4. override fun doInBackground(vararg params: Void?): Boolean {
  5. when (mode) {
  6. 1 -> {
  7. val restaurant: RestaurantEntity =
  8. db.restaurantDao().getAllRestaurant(restaurantEntity.restaurant_Id)
  9. db.close()
  10. return restaurant != null
  11. }
  12. 2 -> {
  13. db.restaurantDao().insertRestaurant(restaurantEntity)
  14. db.close()
  15. return true
  16. }
  17. 3 -> {
  18. db.restaurantDao().deleteRestaurant(restaurantEntity)
  19. db.close()
  20. return true
  21. }
  22. }
  23. return false }

而且,我是这样使用的,这不是正确的方法。

  1. val checkFav = DBAsyncTask(context, restaurantEntity, 1).execute()
  2. val isFav = checkFav.get()

数据库示例应该为整个应用程序创建一次,引用应该在任何地方使用
我应该如何实现这一点???

83qze16e

83qze16e1#

如果您需要重写此文件并使用kotlin/room,我认为这是一个更好的选择。
另一种选择是使用单例模式,如果您使用kotlin,您可以一起使用协同路由,如果使用java,则可以使用task。
我相信单态或单态可以解决你的问题。

8fq7wneg

8fq7wneg2#

您必须创建singleton类来获取db示例。可能是这样的事情。

  1. public class DbBuilder{
  2. private static Builder databaseBuilder = null;
  3. public static Builder getInstance() {
  4. if(databaseBuilder == null)
  5. {
  6. databaseBuilder = Room.databaseBuilder(context,
  7. RestaurantDatabase::class.java, "restaurant-db").build() // create your dbBuilder here
  8. return databaseBuilder;
  9. }
  10. else
  11. {
  12. return databaseBuilder;
  13. }
  14. }
  15. }

然后你可以像这样在代码中调用它

  1. val db = DbHelper.getInstance()
展开查看全部

相关问题