在AsyncTask

时间:2015-10-13 01:56:53

标签: android

我有一种方法可以根据传递给AsyncMethod的链接从文件夹下载图像

我已经做了一些更改,现在图像驻留在数据库上。编辑我的downloadAsyn Task时遇到一些问题,因为它不再接收链接,而是接收一长串字符(数据库中的BLOB)。

我已粘贴下面的代码,并尝试在分配cImg1位图以显示我的图像时找到帮助。

谢谢

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImageTask(ImageView bmImage) {
            this.bmImage = bmImage;
        }

        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];// this parameter once had url of image  

   //but now it has the image bitmap.
            Bitmap cImg1= null;
            try {
             InputStream in =  new java.net.URL(urldisplay).openStream();
           // cImg1= BitmapFactory.decodeStream(in);
            cImg1=urldisplay;//Assign strings to BitMap?
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return cImg1;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }

    }

1 个答案:

答案 0 :(得分:0)

下面的代码将正常工作。

public class DownloadImageTask extends AsyncTask<String, Integer, Bitmap> {
    Context _context;
    ImageView _imageView;
    private OnResponseListener _responder;
    private String _errorMessage;

    public DownloadImageTask(ImageView bmImage, OnResponseListener responseListener) {
        this._imageView = bmImage;
        _context = bmImage.getContext();
        _responder = responseListener;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    protected Bitmap doInBackground(String... urls) {
        int count;
        String urlDisplay = urls[0];
        Bitmap bitmap = null;

        try {
            InputStream in = new java.net.URL(urlDisplay).openStream();
            BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true; options.inInputShareable = true;
            bitmap = BitmapFactory.decodeStream(in, null, options);

            URLConnection urlConnection = new java.net.URL(urlDisplay).openConnection();
            urlConnection.connect();
            InputStream inputStream = urlConnection.getInputStream();
            int lengthOfFile = urlConnection.getContentLength();

            byte data[] = new byte[1024];
            long total = 0;
            while ((count = inputStream.read(data)) != -1) {
                total += count;
                int progress = (int) total * 100 / lengthOfFile;
                publishProgress(progress);
            }
        } catch (Exception e) {
            _errorMessage = e.getMessage();
            e.printStackTrace();
        }
        return bitmap;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    protected void onPostExecute(Bitmap result) {
        if (result != null){
            _responder.onSuccess(result);
        }
        else
            _responder.onFailure(_errorMessage);
    }

    public interface OnResponseListener {
        void onSuccess(Bitmap result);
        void onFailure(String message);
    }
}