在我的应用程序中,系统将从网址下载图像并将其保存到手机内存中。(我没有在问题中包含url地址)最重要的是,它还将数据保存到 sqlite 数据库中。保存的数据是文件名、文件路径和文件大小。但目前,一旦我完成下载过程,无论下载完成还是在过程中失败,它也会插入到数据库中。
有什么方法可以检查下载过程是否完成?
GalleryScreen.this.runOnUiThread(new Runnable() {
@Override
public void run() {
boolean isDownloadResult = false;
int NumIncrease = 0;
Log.i(TAG, "NumberIncrease:" +NumIncrease);
Toast.makeText(getApplicationContext(), "Downloading.............>>>>>>>>>>>", Toast.LENGTH_SHORT).show();
Bitmap bm;
InputStream in;
try{
in = new java.net.URL(URL).openStream();
bm = BitmapFactory.decodeStream(new PatchInputStream(in));
File storage = new File(Environment.getExternalStorageDirectory() + File.separator + "/Images/");
Log.i(TAG,"storage:" +storage);
Log.i(TAG,"storage:" +storage.getAbsolutePath());
if(!storage.exists()){
storage.mkdirs();
}
String FileName = "/"+CONTENT_ID+".jpg";
FileOutputStream fos = new FileOutputStream(storage + FileName);
bm.compress(Bitmap.CompressFormat.JPEG, 85, fos);
String filepath = storage + FileName;
File filecheck = new File (filepath);
long fileSize = filecheck.length();
fos.flush();
fos.close();
Log.i(TAG, "bm:" +bm);
Log.i(TAG, "fos:" +fos);
Log.i(TAG, "filesize:" +fileSize);
Log.i(TAG, "filepath:" +filepath);
helper.insert_content(filepath, fileSize, requestTime);
isDownload = false;
}
catch(IOException e1){
e1.printStackTrace();
}
}
});
请使用AsyncTask。 AsyncTask 可以正确且轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。
AsyncTask 被设计为围绕 Thread 和 Handler 的辅助类,并不构成通用的线程框架。 AsyncTasks 理想情况下应该用于短操作(最多几秒钟)。
您可以只使用匿名类来执行异步任务。这会喜欢这样:
ImageView mChart = (ImageView) findViewById(R.id.imageview);
String URL = "http://www...anything ...";
mChart.setTag(URL);
new DownloadImageTask.execute(mChart);
任务类:
public class DownloadImagesTask extends AsyncTask<ImageView, Void, Bitmap> {
ImageView imageView = null;
@Override
protected Bitmap doInBackground(ImageView... imageViews) {
this.imageView = imageViews[0];
return download_Image((String)imageView.getTag());
}
@Override
protected void onPostExecute(Bitmap result) {
imageView.setImageBitmap(result);
}
private Bitmap download_Image(String url) {
...
}
Here, 执行后,您可以轻松检查下载图像的过程是否完成。
进一步阅读
- http://developer.android.com/reference/android/os/AsyncTask.html http://developer.android.com/reference/android/os/AsyncTask.html
- 使用 AsyncTask 加载图像 https://stackoverflow.com/questions/8224993/loading-image-using-asynctask
- Android:使用 Asynctask 从网络加载图像 https://stackoverflow.com/questions/3090650/android-loading-an-image-from-the-web-with-asynctask
- Android 帮助在图像加载时添加进度对话框吗? https://stackoverflow.com/questions/7177847/android-help-with-adding-a-progress-dialog-while-image-loading
EDIT:
- 如果您尝试下载较大的文件,您可能会考虑
将您的应用程序放入某种类型的Service http://developer.android.com/reference/android/app/Service.html因为这会
可能需要几个小时。
- 您可以考虑使用下载管理器 http://developer.android.com/reference/android/app/DownloadManager.html对于较新的设备
(Android 2.3+)
- 也是一个不错的资源->使用 Android 下载文件,并在 ProgressDialog 中显示进度 https://stackoverflow.com/questions/3028306/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)