我有AsyncTask
来执行某些数据库操作。问题是当我在AsyncTask
上执行ThreadPoolExecutor
UI线程被阻止时。这是我的代码:
private class AddToQueue extends AsyncTask<String, Void, String> {
int qLength = 0;
protected String doInBackground(String... params) {
if (db == null) return null;
db.delete(DBHelper.QUEUETABLE, null, null);
ContentValues cv = new ContentValues();
for (int i = 0; i < qLength; i++) {
cv.put(DBHelper.INDEX, i);
cv.put(DBHelper.PATH, items.get(i).getPath());
cv.put(DBHelper.TITLE, items.get(i).getTitle());
try {
db.insert(DBHelper.QUEUETABLE, null, cv);
} catch (Exception e) {
e.printStackTrace();
}
cv.clear();
}
return "Executed";
}
@Override
protected void onPostExecute(String result) { }
@Override
protected void onPreExecute() {
qLength = list.getAdapter().getCount();
}
@Override
protected void onProgressUpdate(Void... values) { }
答案 0 :(得分:0)
好的,我解决了。刚刚更换了
ContentValues cv = new ContentValues();
for (int i = 0; i < c.getCount(); i++) {
c.moveToPosition(i);
cv.put(DBHelper.INDEX, i);
cv.put(DBHelper.PATH, c.getString(0));
cv.put(DBHelper.TITLE, c.getString(1));
try {
// db.insert(DBHelper.QUEUETABLE, null, cv);
} catch (Exception e) {
e.printStackTrace();
}
cv.clear();
这一个
String sql = "INSERT INTO " + DBHelper.QUEUETABLE + "(" +
DBHelper.INDEX + ", " + DBHelper.PATH + ", " +
DBHelper.TITLE + ") VALUES (?, ?, ?)";
db.beginTransaction();
SQLiteStatement stmt = db.compileStatement(sql);
for (int i = 0; i < c.getCount(); i++) {
c.moveToPosition(i);
stmt.bindString(1, i + "");
stmt.bindString(2, c.getString(0));
stmt.bindString(3, c.getString(1));
stmt.execute();
stmt.clearBindings();
}
db.setTransactionSuccessful();
db.endTransaction();