我正在尝试使用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;
}
因此,没有显示进度,但最后数据库正确加载。请帮帮我。
答案 0 :(得分:2)
ProgressDialog MyDialog = ProgressDialog.show( YourCurrentClass.this, "Please wait!" , "Loading..", true);
这可能有所帮助
答案 1 :(得分:2)
您可以通过两种方式使用它: 或 AsyncTask的preExecute()和postExecute()方法,其中preExecute()只显示thr progressDialog,而postExecute()则忽略相同。 要么 使用处理程序显示进度对话框并关闭相同的...
希望你得到我所说的......