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

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

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

class DBAsyncTask(val context: Context, val restaurantEntity: RestaurantEntity, val mode: Int) :
AsyncTask<Void, Void, Boolean>() {

val db = Room.databaseBuilder(context, RestaurantDatabase::class.java, "restaurant-db").build()

override fun doInBackground(vararg params: Void?): Boolean {

    when (mode) {

        1 -> {
            val restaurant: RestaurantEntity =
                db.restaurantDao().getAllRestaurant(restaurantEntity.restaurant_Id)
            db.close()
            return restaurant != null

        }

        2 -> {
            db.restaurantDao().insertRestaurant(restaurantEntity)
            db.close()
            return true

        }

        3 -> {
            db.restaurantDao().deleteRestaurant(restaurantEntity)
            db.close()
            return true
        }
    }
    return false    }

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

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

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

83qze16e

83qze16e1#

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

8fq7wneg

8fq7wneg2#

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

public class DbBuilder{

private static Builder databaseBuilder = null;

public static Builder getInstance() {

    if(databaseBuilder == null)
    {
        databaseBuilder  = Room.databaseBuilder(context, 
        RestaurantDatabase::class.java, "restaurant-db").build()  // create your dbBuilder here
        return databaseBuilder;
    }
    else 
    {

        return databaseBuilder;
    }
}
}

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

val db = DbHelper.getInstance()

相关问题