我正在使用進度條顯示下載進度。這裏是我的代碼: -ProgressBar在下載時閃爍
@Override
protected String doInBackground(String... f_url) {
int count;
Looper.prepare();
Boolean check_sd_card_mounted = android.os.Environment
.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED);
ConnectivityManager cm = (ConnectivityManager) mcontext
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
boolean isConnected = false;
if (activeNetworkInfo != null) {
isConnected = activeNetworkInfo.isConnected();
}
if (check_sd_card_mounted) {
if (!isConnected) {
try {
return "no Connection";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
download(f_url[0]);
}
}
return null;
}
/**
* Updating progress bar
* **/
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
progressBar.setVisibility(View.VISIBLE);
progressBar.setIndeterminate(false);
progressBar.setMax(100);
progressBar.setProgress(values[0]);
pinProgress.setProgress(values[0]);
updatePinProgressContentDescription(pinProgress);
}
,並在下面的下載()和複印件()函數從我打電話publishProgress()來updatemy進度
private long download(String url) {
int bytesCopied = 0;
try {
client = new DefaultHttpClient();
httpGet = new HttpGet(url);
response = client.execute(httpGet);
totalSize = response.getEntity().getContentLength();
File file = new File(Environment.getExternalStorageDirectory()
+ "/" + "MyFile1.pdf");
if (file.exists() && totalSize == file.length()) {
Toast.makeText(mcontext, "File already downloaded",
Toast.LENGTH_LONG).show();
} else if (file.exists()) {
httpGet.addHeader("Range", "bytes=" + file.length() + "-");
client = new DefaultHttpClient();
httpGet = new HttpGet(url);
response = client.execute(httpGet);
}
outputStream = new ProgressReportingRandomAccessFile(file, "rw");
publishProgress(0, (int) totalSize);
InputStream input = response.getEntity().getContent();
bytesCopied = copy(input, outputStream);
} catch (Exception e) {
Toast.makeText(mcontext, e.getMessage(), Toast.LENGTH_LONG)
.show();
}
return bytesCopied;
}
public int copy(InputStream input, RandomAccessFile out)
throws IOException, NetworkErrorException {
if (input == null || out == null) {
return -1;
}
byte[] buffer = new byte[8192];
BufferedInputStream in = new BufferedInputStream(input, 8192);
int count = 0, n = 0;
long errorBlockTimePreviousTime = -1, expireTime = 0;
long total = 0;
try {
byte data[] = new byte[8192];
while (!interrupt && (count = in.read(data)) != -1) {
out.seek(out.length());
myProgress = (int) (((long) total * 100)/totalSize);
publishProgress(myProgress);
total += count;
// while (!interrupt) {
// n = in.read(data, 0, 8192);
if (n == -1) {
break;
}
out.write(data, 0, count);
// count += n;
}
IsDownlodComplete = true;
} finally {
// must close client first
client = null;
out.close();
in.close();
input.close();
}
return count;
}
進度更新,但閃爍和不清晰。我正在onProgressUpdate更新它在UI線程上運行,但仍然閃爍。我不知道爲什麼?
在此先感謝。
我在listView中使用這個progressBar。是否有我需要設置的listView中的任何屬性。因爲listItem包含許多像TextView和ProgressBar和Button的視圖。這是閃爍的原因嗎? –