2012-12-31 28 views
-1

在我的應用程序的第一次運行中,我必須將數據庫文件複製到數據文件夾。大約需要10秒,在這段時間內用戶會看到黑屏。我想使用AsynTask技術來顯示進度條。但它不工作了,我看到黑屏之後進度條消失......當數據庫複製時顯示進度條

與此代碼我調用拷貝數據庫類,也叫我處理AsynTsk ...

new asyn().execute(); 
    try { 
     myDbHelper.createDataBase(); 

    } catch (IOException ioe) { 
     // throw new Error("Unable to create database"); 
    } 

,這是我AsynTask代碼:

public class asyn extends AsyncTask<String, Integer, String> { 
     ProgressDialog dialog; 
     @Override 
     protected void onPreExecute() 
     { 
     //loading toast 
      //final DataBaseHelper myDbHelper = new DataBaseHelper(this); 
      String firstload2 = myDbHelper.getfirstload(); 
      if(firstload2.matches("1")) { 
       dialog=new ProgressDialog(DictionaryActivity.this); 
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
        dialog.setMax(100); 
        dialog.show(); 
       myDbHelper.changefirstload(); 
      } 



     } 
     @Override 
     protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     // perform desired task in this doInBackground Block. 
     for(int i=0;i<20;i++) 
     { 
     publishProgress(5); 
     try { 
     Thread.sleep(100); 
     } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
     } 

     return ""; 
     } 
     @Override 
     protected void onProgressUpdate(Integer... values) { 
     // TODO Auto-generated method stub 
     super.onProgressUpdate(values); 
     dialog.incrementProgressBy(5); 
     } 

     @Override 
     protected void onPostExecute(String result) 
     { 
     dialog.dismiss();  
     AlertDialog.Builder a=new Builder(DictionaryActivity.this); 
     a.setMessage("Successfully Done"); 
     a.setTitle("Try"); 
     a.setPositiveButton("OK",null); 
     a.show(); 
      } 
    } 

我的錯在哪裏?我該如何解決這個問題?

回答

1

myDbHelper.changefirstload();應該在doInBackground()方法內。 onPreExecute()在UI線程上執行。

就進度條而言,這裏有點困難。就我個人而言,我會做一個不確定的進度條(只是一個旋轉圖標或加載時的東西)。但是,如果你想擁有%欄,你需要將該方法分解爲多個方法,然後更新它們之間的進度。