2012-03-08 70 views
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; 
    } 
+2

mContext从哪里来? – 2012-03-08 17:45:26

+0

@二人更新了我的qn。我坚信这个问题来自beginTransaction,setTransactionSuccessful和endTransaction,因为如果我将它们注释掉并使用常规的execSQL语句,对话框会显示,但插入现在变得非常缓慢。 – OckhamsRazor 2012-03-08 17:55:47

回答