2015-05-28 39 views
8

Tôi đang làm việc trên ứng dụng demo trong đó tôi đang sử dụng thư viện Picasso v2.5.2. Nó hoạt động tốt trên tất cả các phiên bản hệ điều hành android, nhưng không phải trong lollipop.Hình ảnh không tải trong android 5.0 sử dụng thư viện picasso

Hình ảnh có kích thước là 130KB không tải cho tôi. Hình ảnh có kích thước ít tải đúng.

Đây là mã của tôi để tải bitmap và đặt trên imageview.

target = new Target() { 
    @Override 
    public void onPrepareLoad(Drawable drawable) {} 

    @Override 
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) { 
     if(bitmap != null) { 
      imageView.setImageBitmap(bitmap); 
     } 
    } 

    @Override 
    public void onBitmapFailed(Drawable drawable) {} 
}; 

Picasso.with(this).load(URL).into(target); 

Tôi không chắc mình cần phải làm gì với thứ này để tôi cũng làm việc trên lollipop hoặc đây là lỗi trong lib?

Trả lời

0

Tại sao bạn sử dụng Target nếu bạn chỉ cần tải hình ảnh vào ImageView? Chỉ cần sử dụng điều này:

Picasso.with(this).load(URL).into(imageView, new Callback() 
    { 
     @Override 
     public void onSuccess() 
     { 
      //Dimiss progress dialog here 
     } 

     @Override 
     public void onError() 
     { 
      //And here 
     } 
    }); 

Để xem tài liệu here.

+0

Tôi đang loại bỏ hộp thoại tiến trình khi hình ảnh đã được tải. Tôi đã có dòng mã đó trong 'onBitmapLoaded' –

+0

@Williams xem chỉnh sửa của tôi. Bạn có thể sử dụng một 'Callback' cho việc này. Tôi sẽ đề nghị bạn chỉ sử dụng một 'Target' nếu bạn thực sự cần sử dụng nó. –

+0

Được rồi, cảm ơn tôi sẽ thử điều này và sẽ cập nhật cho bạn. –

13

Đó là sự cố đã biết. Vấn đề là Picasso giữ một tham chiếu yếu cho Target. Để có được nó làm việc bạn cần phải làm cho nó mạnh mẽ, bằng cách lưu trữ một Target như là một thẻ xem, ví dụ.

target = new Target() { 
    @Override 
    public void onPrepareLoad(Drawable drawable) {} 

    @Override 
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) { 
     if(bitmap != null) { 
      imageView.setImageBitmap(bitmap); 
     } 
    } 

    @Override 
    public void onBitmapFailed(Drawable drawable) {} 
    }; 

imageView.setTag(target); 
Picasso.with(this).load(URL).into((Target) imageView.getTag()); 

EDIT:

tôi đề nghị bạn sử dụng Glide, nó rất giống với Picasso, và cũng khuyến cáo của Google. Và như bạn có thể thấy vào cuối của this thread, nhà phát triển ban đầu giải quyết vấn đề BitmapFactory này bằng cách sử dụng bộ đệm bổ sung.

+0

Không làm việc cho tôi: ( –

+0

cùng một vấn đề tôi lớn lên ở đây https://github.com/square/picasso/issues/1054 –

+0

Kiểm tra chỉnh sửa của tôi, xin vui lòng – rom4ek

0
 Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView, new Callback()  { 
    @Override public void onSuccess() 
    { 
    } 
    @Override public void onError() 
    { 
    } 
    }); 

fit() sẽ giúp bạn tải hình ảnh.Và sử dụng android: adjustViewBounds = "true" trong ImageView của bạn trong xml.

Các vấn đề liên quan