android如何检查是否 process 下载的图像已完成或不?

标签: Android
发布时间: 2017/3/13 21:30:34
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在我 application 系统将从 url 下载图像并将其保存到手机内存。(我未列 url address 问题)最重要的是,它也会保存数据到 sqlite 数据库。保存的数据是文件名称、 文件路径和文件大小。但目前一旦我去了通过下载 process 是否下载完成或失败中间的 process ,它也会向数据库中插入。
有没有什么办法,我可以检查是否下载 process 或不完成?

        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();
                                }   
            }

        });

解决方法 1:

请使用 AsyncTask . AsyncTask 允许适当且易于使用的 UI 线程。此类允许执行后台操作,无需操作线程的处理程序发布在 UI 线程上的结果。

AsyncTask设计要围绕线程的帮助器类和 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,你可以轻松地检查是否 process 下载的图像已完成或不。

进一步的阅读

编辑︰

官方微信
官方QQ群
31647020