Android 如何检查图像下载过程是否完成?

Android 如何检查图像下载过程是否完成?,android,download,save,store,Android,Download,Save,Store,在我的应用程序中,系统将从url下载图像并将其保存到手机存储器中。(我没有在问题中包括url地址)除此之外,它还将数据保存到sqlite数据库中。保存的数据是文件名、文件路径和文件大小。但目前,我通过下载过程,不管下载完成或失败的中间过程,它也将插入到数据库。 有什么方法可以检查下载过程是否完成 GalleryScreen.this.runOnUiThread(new Runnable() { @Override public vo

在我的应用程序中,系统将从url下载图像并将其保存到手机存储器中。(我没有在问题中包括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允许正确且轻松地使用UI线程。此类允许在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序

AsyncTask被设计成一个围绕线程和处理程序的助手类,并不构成通用线程框架。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) {
   ...
}
公共类下载ImageStask扩展异步任务{
ImageView ImageView=null;
@凌驾
受保护位图doInBackground(ImageView…ImageView){
this.imageView=imageView[0];
返回下载图片((字符串)imageView.getTag());
}
@凌驾
受保护的void onPostExecute(位图结果){
设置图像位图(结果);
}
私有位图下载\u图像(字符串url){
...
}
在这里,onPostExecute,您可以轻松检查图像下载过程是否完成

进一步阅读

编辑:

    如果你想下载更大的文件,你可以考虑 将应用程序放入某种类型的 可能需要几个小时 你可以考虑使用新设备。 (使用Android 2.3+)
  • 也是一个不错的资源->

请使用AsyncTask。AsyncTask允许正确、轻松地使用UI线程。此类允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序

AsyncTask被设计为围绕线程和处理程序的帮助类,并不构成通用线程框架。AsyncTask理想情况下应用于短操作(最多几秒钟)

您可以只为异步任务使用匿名类。如下所示:

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) {
   ...
}
公共类下载ImageStask扩展异步任务{
ImageView ImageView=null;
@凌驾
受保护位图doInBackground(ImageView…ImageView){
this.imageView=imageView[0];
返回下载图片((字符串)imageView.getTag());
}
@凌驾
受保护的void onPostExecute(位图结果){
设置图像位图(结果);
}
私有位图下载\u图像(字符串url){
...
}
在这里,onPostExecute,您可以轻松检查图像下载过程是否完成

进一步阅读

编辑:

    如果你想下载更大的文件,你可以考虑 将应用程序放入某种类型的 可能需要几个小时 你可以考虑使用新设备。 (使用Android 2.3+)
  • 也是一个不错的资源->

如果您使用AsyncTask,那么您可以检查它是否正在运行如果您使用AsyncTask,那么您可以检查它是否正在运行谢谢您提供的信息。我将尝试研究AsyncTask。正如您提到的,AsyncTasks最好用于短时间操作(最多几秒钟)。现在我想下载图像,所以我想这应该没有问题。但如果以后我也想从url实现下载视频功能。AsyncTask适合该任务吗?@IssacZH。非常欢迎,因为它帮助了您。:)我已将我的答案编辑为您的评论。请查看编辑部分。再次感谢!现在我知道了他知道如何在这方面取得进展。你的答案非常有帮助。@IssacZH。如果我的答案对你有帮助,那么别忘了接受我的答案。很高兴知道我的答案非常有帮助。:)嗨,@Mahbubur R Aaman。我发布了我关于异步任务的问题。如果你觉得没问题,请花一点时间来完成。谢谢!谢谢你的帮助您的信息。我将尝试研究AsyncTask。正如您所提到的,AsyncTasks最好用于短期操作(最多几秒钟)。现在我想下载图像,所以我想这应该没有问题。但如果以后我也想从url实现下载视频功能。AsyncTask适合该任务吗?@IssacZH。非常欢迎,因为它帮助了您。:)我已将我的答案编辑为您的评论。请查看编辑部分。再次感谢!现在我知道了他知道如何在这方面取得进展。你的答案非常有帮助。@IssacZH。如果我的答案对你有帮助,那么别忘了接受我的答案。很高兴知道我的答案非常有帮助。:)嗨,@Mahbubur R Aaman。我发布了我关于异步任务的问题。如果你觉得没问题,请花点时间来完成。谢谢!