30/09/2018, 18:38

Lấy bitmap từ một url image cho android

Ai biết lấy bitmap từ một url ảnh cho android không, chỉ mình với,
mình dùng imageloader của volley:

  • chưa có cache: thì nó toàn trả kết quả sau vòng for (khi chạy hết for rồi nó mới trả kết quả). mà mình muốn get cái bitmap đó ngay trực tiếp của cái i đó luôn.
  • có cache: Thi chạy đúng

cảm ơn mọi người.

caybang viết 20:52 ngày 30/09/2018

show code đi bạn, ngữ cảnh làm khác nhau, cũng khó chia sẻ.

Nam viết 20:53 ngày 30/09/2018
private Bitmap anh(String url){
        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
        imageLoader.get(url, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                if(response.getBitmap()!=null && isImmediate) {
                    Log.i("Z", (response.getBitmap()!=null)+"_"+isImmediate);
                    bmp = response.getBitmap();
                }
                else {
                    bmp = response.getBitmap();
                    Log.i("Z2", (response.getBitmap()!=null)+"_"+isImmediate);
                }
            }
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        });
        Log.i("Z3", "Ngoài "+(bmp!=null));
        return bmp;
    }

đây là đoạn log. chạy lần đầu với lengh của for =3.
3 dòng cuối cùng đó, chạy hết vòng for rồi mới trả kết quả.

11-03 04:40:16.781    5471-5471/com.zungx.test I/Z2﹕ false_true
11-03 04:40:16.781    5471-5471/com.zungx.test I/Z3﹕ Ngoài false
11-03 04:40:16.785    5471-5471/com.zungx.test I/Z2﹕ false_true
11-03 04:40:16.785    5471-5471/com.zungx.test I/Z3﹕ Ngoài false
11-03 04:40:16.867    5471-5471/com.zungx.test I/Z2﹕ false_true
11-03 04:40:16.867    5471-5471/com.zungx.test I/Z3﹕ Ngoài false
11-03 04:40:16.995    5471-5471/com.zungx.test I/Z2﹕ true_false
11-03 04:40:16.996    5471-5471/com.zungx.test I/Z2﹕ true_false
11-03 04:40:16.996    5471-5471/com.zungx.test I/Z2﹕ true_false

log chạy lần 2 khi có cache:

11-03 04:40:57.892    5471-5471/com.zungx.test I/Z﹕ true_true
11-03 04:40:57.892    5471-5471/com.zungx.test I/Z3﹕ Ngoài true
11-03 04:40:57.896    5471-5471/com.zungx.test I/Z﹕ true_true
11-03 04:40:57.896    5471-5471/com.zungx.test I/Z3﹕ Ngoài true
11-03 04:40:57.908    5471-5471/com.zungx.test I/Z﹕ true_true
11-03 04:40:57.908    5471-5471/com.zungx.test I/Z3﹕ Ngoài true

Có tìm được cái link này mà đọc không hiểu lắm.

stackoverflow.com
L. Swifter

Volley, How many times the onResponse in ImageLoader.ImageListener called

android, android-intent, android-volley
asked by L. Swifter on 01:42AM - 26 Aug 15

Nam viết 20:51 ngày 30/09/2018

bạn biết cách nào get bitmap nữa không chỉ mình với

X viết 20:39 ngày 30/09/2018

Dùng Picasso cho nhanh: http://square.github.io/picasso

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
caybang viết 20:43 ngày 30/09/2018

url bạn truyền vào là gì mình không biết, thôi đưa ra các hàm bạn tham khảo

từ 1 link :

 public static Bitmap getBitmapFromURL(String src) {
    try {
        URL url = new URL(src);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        return myBitmap;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

từ một url scard trong máy :

Bitmap getPreview(URI uri) {
    File image = new File(uri);

    BitmapFactory.Options bounds = new BitmapFactory.Options();
    bounds.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(image.getPath(), bounds);
    if ((bounds.outWidth == -1) || (bounds.outHeight == -1))
        return null;

    int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight
            : bounds.outWidth;

    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inSampleSize = originalSize / THUMBNAIL_SIZE;
    return BitmapFactory.decodeFile(image.getPath(), opts);     
}
Nam viết 20:44 ngày 30/09/2018

cảm ơn bạn

Nam viết 20:39 ngày 30/09/2018

Cảm ơn bạn. để tí thử xem.

caybang viết 20:46 ngày 30/09/2018

doi xiu minh viet demo cho ban xem

caybang viết 20:52 ngày 30/09/2018

Dropbox

Dropbox - Error

Dropbox is a free service that lets you bring your photos, docs, and videos anywhere and share them easily. Never email yourself a file again!


ban hien !

Nam viết 20:53 ngày 30/09/2018

cái này bỏ vào for loop khi chạy nó vẫn bỏ qua callback bác à
nó chạy onPrepareLoad xong nó ra khỏi callback luôn
chứ nó không chạy onBitmapLoaded

Bài liên quan
0