加载数据库 - 如何在progressBar中显示进度?

时间:2011-09-27 08:51:30

标签: android database progress-bar

我正在尝试使用ProgressBar,它显示加载数据库的进度,该数据库位于本地资源文件夹中。我不知道这种方式是否可行,因为我正在使用之前从互联网上下载文件的代码。

我认为我必须得到数据库的大小,但我不知道如何做到这一点。 conection.getContentLength()似乎不起作用。连接可能不包含地址资产/ kneipen2.sqlite?

这是在onCreate()中:

new LoadFilesTask().execute("assets/kneipen2.sqlite");

这是AsyncTask内部类:

private class LoadFilesTask extends AsyncTask<String, Integer, Integer> {

     @Override
     protected Integer doInBackground(String... urls) {      

         //oeffneDatenbank();
         int count;
         try {

             myDbHelper = new DataBaseHelper(Start.this);       
            try {           
                myDbHelper.createDataBase();            
            } 
             catch (IOException ioe) {          
                throw new Error("Unable to create database");
            }
            try {

                myDbHelper.openDataBase();

            } catch (SQLException sqle) {

                throw sqle;
            }       

             URL url = new URL(urls[0]);

             //Ignore this! Only used to show that operations can take a long time to complete...
             URLConnection conection = url.openConnection();
             conection.connect();
             int lenghtOfFile = conection.getContentLength();
             // downlod File
             InputStream input = new BufferedInputStream(url.openStream());
             byte data[] = new byte[1024];

             long total = 0;
             while ((count = input.read(data)) != -1) {
                 total += count;
                 // publishing the progress....
                 publishProgress((int)(total*100/lenghtOfFile));       
             }
             input.close();
         } catch (Exception e) {}
         return null;            
    }

因此,没有显示进度,但最后数据库正确加载。请帮帮我。

2 个答案:

答案 0 :(得分:2)

ProgressDialog MyDialog = ProgressDialog.show( YourCurrentClass.this, "Please wait!" , "Loading..", true);

这可能有所帮助

答案 1 :(得分:2)

您可以通过两种方式使用它: 或 AsyncTask的preExecute()和postExecute()方法,其中preExecute()只显示thr progressDialog,而postExecute()则忽略相同。 要么 使用处理程序显示进度对话框并关闭相同的...

希望你得到我所说的......