我想用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)其他?
答案 0 :(得分:0)
将数据库访问器类实现为单例,例如MyDatabase
。
其内部类扩展SQLiteHelper
,根据需要覆盖onCreate()
和onUpdate()
。
在单例的构造函数中创建该内部类的对象。然后让你的单身人士提供你需要的API。在实现该API时,您的单身人士将使用其内部SQLiteHelper
派生类query()
等。
然后,在所有地方,包含AsyncTask
,请使用MyDatabase.INSTANCE.myDbQuery()
Singleton是正确的抽象,因为你只有一个数据库(可能有很多表)。