包含在db asyncTask中更好的是什么?

时间:2014-04-21 10:06:27

标签: java android database sqlite android-asynctask

我想用asyncTask

包装db访问

以下哪项更好,为什么?

(a)中

AsyncTask at = new AsyncTask
{

SavedOffersSQLiteHelper savedOffersSQLiteHelper = new SavedOffersSQLiteHelper();
savedOffersSQLiteHelper.addItem(..)

}

(b)中

    public SavedOffersSQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // SQL statement to create book table
        String CREATE_TABLE = "CREATE TABLE "
                + TABLE_NAME
                + " ( "
                + "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                + "uid VARCHAR(36))";

        db.execSQL(CREATE_TABLE);
    }


    public void addItem(Offer offer) {

///====== here ========
//AsyncTask ast = new AsyncTask {

        Log.d(MyLogger.TAG, "add saved-offer");
        // 1. get reference to writable DB
        SQLiteDatabase db = this.getWritableDatabase();

        // 2. create ContentValues to add key "column"/value
        ContentValues values = new ContentValues();
        values.put(KEY_UID, offer.getId().toString());


        // 3. insert
        db.insert(TABLE_NAME, // table
                null, // nullColumnHack
                values); // key/value -> keys = column names/ values = column
                            // values

        String text = String.format("item was added to table: {0}", TABLE_NAME);
        Log.d(MyLogger.TAG, text);
        Toast.makeText(mContext, text, Toast.LENGTH_LONG);

        // 4. close
        db.close();
// }
///====end asyncTasl======
    }

(c)其他?

1 个答案:

答案 0 :(得分:0)

将数据库访问器类实现为单例,例如MyDatabase

其内部类扩展SQLiteHelper,根据需要覆盖onCreate()onUpdate()

在单例的构造函数中创建该内部类的对象。然后让你的单身人士提供你需要的API。在实现该API时,您的单身人士将使用其内部SQLiteHelper派生类query()等。

然后,在所有地方,包含AsyncTask,请使用MyDatabase.INSTANCE.myDbQuery()

Singleton是正确的抽象,因为你只有一个数据库(可能有很多表)。