Я использую ProgressBar
со значениями для отображения во время извлечения базы данных в моем Android приложения, но в ProgressBar
значения превышает 100 и отображают до 122%ProgressBar в AsyncTask показывают значений больше 100
Я попытался установить ,
if(progress<=100)
publishProgress(progress);
, но это приводит к показу 100% в течение длительного времени.
Может кто-нибудь, пожалуйста, помогите в расчете прогресса с реагированием на размер файла и извлечения.
Вот мой код:
@Override
protected Integer doInBackground(Void... params) {
byte[] buf = new byte[8192];
String name = null;
try {
System.out.println("doInBackground");
listener.onDoInBackground(context,true);
name = "db_sqlite.7z";
//InputStream of the sqlite file
InputStream in = context.getResources().openRawResource(R.raw.db_sqlite);
int fileSize = in.available();
FileOutputStream out = context.openFileOutput("db.sqlite", 0);//Context.MODE_PRIVATE);
try {
/* In contrast to other classes in org.tukaani.xz,
LZMAInputStream doesn't do buffering internally
and reads one byte at a time. BufferedInputStream
gives a huge performance improvement here but even
then it's slower than the other input streams from
org.tukaani.xz.
in = new BufferedInputStream(in); */
in = new XZInputStream(in);
int size;
int counter=0;
while ((size = in.read(buf)) != -1) {
//System.out.write(buf, 0, size);
if(this.isCancelled())
break;
out.write(buf, 0, size);
counter++;
progress = (int) (counter*100*1024/(double)fileSize);
publishProgress(progress);
}
protected void onProgressUpdate(Integer... values) {
//System.out.println("onProgressUpdate");
super.onProgressUpdate(values);
listener.onProgressUpdation(context, true, values);
}
В деятельности:
@Override
public void onProgressUpdation(Context context, Boolean isStarted, Integer... values) {
tv_you_can_change.setText(context.getResources().getString(R.string.extracting_database) + " " + values[0] + "%");
tv_you_can_change.setVisibility(View.VISIBLE);
progressBar.setProgress(values[0]);
//System.out.println("onProgressUpdation");
}
проверить значение 'значения [0]' перед установкой значение для индикатора выполнения. то есть перед '.setProgress (значения [0])' – govindpatel
@govindpatel: проблема связана с progress = (int) (counter * 100 * 1024/(double) fileSize); –