1
没有显示可能重复:
Android: Heavy DB operations with progress dialog进度对话框中的AsyncTask
我有一个巨大的,我正在尝试插入的SQLite数据库字符串数组。由于这个原因,我在我的doInBackground
中使用begintransaction idiom,这非常完美。问题是ProgressDialog显示为而不是。可能是什么问题呢?是否因为beginTransaction只能在EXCLUSIVE模式下工作?任何帮助表示赞赏。谢谢!
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(Constants.CREATE_TABLE_DICT);
mDatabase = database;
readFile(R.raw.dict);
new InitDB().execute();
}
public class InitDB extends AsyncTask<Void, Void, Void> {
InsertHelper ih;
int wordColumn;
private ProgressDialog mProgD;
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgD = ProgressDialog.show(mContext, "", "Wait", true);//NOT BEING SHOWN!
ih = new InsertHelper(mDatabase, "dictionary");
wordColumn = ih.getColumnIndex("word");
}
@Override
protected Void doInBackground(Void... params) {
mDatabase.beginTransaction();
try {
String [] ss = mWords.toString().split("\\|");
for(int i=0; i<ss.length; i++) {
ih.prepareForInsert();
String word = ss[i];
ih.bind(wordColumn, word);
ih.execute();
}
mDatabase.setTransactionSuccessful();
} finally {
mDatabase.endTransaction();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
mProgD.dismiss();
}
}
编辑: 这里就是上下文来自:
//Constructor
public AppDatabase(Context context) {
super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
mContext = context;
}
mContext从哪里来? – 2012-03-08 17:45:26
@二人更新了我的qn。我坚信这个问题来自beginTransaction,setTransactionSuccessful和endTransaction,因为如果我将它们注释掉并使用常规的execSQL语句,对话框会显示,但插入现在变得非常缓慢。 – OckhamsRazor 2012-03-08 17:55:47