【问题标题】:How to check whether the process of download image is completed or not?如何检查下载图像的过程是否完成?
【发布时间】:2012-12-20 04:24:26
【问题描述】:

在我的应用程序中,系统将从 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 那么你可以检查它是否正在运行

标签: android download save store


【解决方案1】:

请使用 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) {
   ...
}

这里,onPostExecute,可以很方便的查看下载图片的过程是否完成。

进一步阅读

编辑:

【讨论】:

  • 感谢您的信息。我将尝试研究 AsyncTask。正如您所提到的,AsyncTasks 理想情况下应该用于短操作(最多几秒钟。)。现在我想下载图像,所以我想应该没问题。但是,如果以后我也想从 url 实现下载视频功能。 AsyncTask 是否适合该任务?
  • @IssacZH。最欢迎,因为它帮助了你。 :) 我已将我的答案编辑为您的评论。请查看编辑部分。
  • 再次感谢您!现在我知道如何在这方面取得进展。你的回答很有帮助。
  • @IssacZH。如果我的回答对您有帮助,请不要忘记接受我的回答。很高兴知道我的回答很有帮助。 :)
  • 嗨,@Mahbubur R Aaman。我发布了关于 asyncTask 的问题。如果你没问题,请花点时间完成它。谢谢! stackoverflow.com/questions/13983517/…
猜你喜欢
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多