I am working on demo application in which I am using Picasso library v2.5.2. It is working fine on all android operating system version, but not in lollipop.
Image whose size is 130KB which is not loading for me. Images whose size is less are loading correctly.
Here is my code for downloading bitmap and set on 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);
I'm not sure what extra stuff I have to do with this so that I will work on lollipop also or this is bug in lib ?
It's a known problem. The problem is that Picasso keeps a weak reference for the Target. To get it working you need to make it strong, by storing a Target as a tag of view, for example.
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:
I suggest you to use Glide, it's very similar to Picasso, and also recommended by Google. And as you can see in the end of this thread, the original developer solves this BitmapFactory problem by using extra buffer.
Why would you use a Target if you only need to load the image into the ImageView? Just use this:
Picasso.with(this).load(URL).into(imageView, new Callback()
{
#Override
public void onSuccess()
{
//Dimiss progress dialog here
}
#Override
public void onError()
{
//And here
}
});
For documentation look here.
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() will help you to load image.And use android:adjustViewBounds="true" in your ImageView in xml.
Related
I have this code to load some images in the adapter. The problem is that most of time it works but sometimes the list was not displayed.
for (Product p: listItem) {
Picasso.get().load( p.getBanner()).into(new Target() {
#Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
bitmapList.add(bitmap);
notifyDataSetChanged();
}
#Override
public void onBitmapFailed(Exception e, Drawable errorDrawable) {
}
#Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
The problem was because I have used anonymous Target made the object eligible for garbage collection and sometimes it destroyed by Garbage Collector.
I am using Picasso to add an icon to my actionbar. I've read that in order to load the image every time I need to make my Target of strong reference and for that I've used final. But, again, it goes into onPrepareLoad and never reaches onBitmapLoaded.
What am I doing wrong?
private void setLogoToActionBar() {
final Target target = new Target() {
#Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.d("DEBUG", "onBitmapLoaded");
Drawable d = new BitmapDrawable(getResources(), bitmap);
actionBar.setIcon(d);
}
#Override
public void onBitmapFailed(Drawable errorDrawable) {
Log.d("DEBUG", "onBitmapFailed");
}
#Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.d("DEBUG", "onPrepareLoad");
actionBar.setIcon(placeHolderDrawable);
}
};
Picasso.with(getContext()).load(mShop.getClientLogo()).placeholder(R.drawable.shop_asset).resize(100, 100).into(target);
}
I am using picasso library for set marker with image on google map api. But i need to get loaded drawable which loaded from picasso.
I tried this but its not returning the url which loaded from picasso
Target target = new Target() {
#Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
}
#Override
public void onBitmapFailed(Drawable errorDrawable) {}
#Override
public void onPrepareLoad(Drawable placeHolderDrawable) {}
};
You cannot get the URL from Picasso after the drawable has loaded (Picasso.LoadedFrom will only tell you whether the image was loaded from DISK, MEMORY or NETWORK).
But since you need to specify the URL when you tell Picasso to .load() the image, you can simply store the URL somewhere and use it later on.
If your actual goal is to load a custom marker icon from a remote URL into a Google Maps marker, here is how to do it using an ad-hoc ImageView:
private void loadImageFromUrlIntoMarker(final String url, final Marker marker) {
final ImageView iv = new ImageView(context);
Picasso.with(context).load(url).into(iv, new Callback() {
#Override
public void onSuccess() {
Bitmap bm = ((BitmapDrawable) iv.getDrawable()).getBitmap();
try {
marker.setIcon(BitmapDescriptorFactory.fromBitmap(bm));
} catch (Exception e) {
Log.e(getClass().getSimpleName(), "Could not load image into marker.");
}
}
#Override
public void onError() {
Log.e(getClass().getSimpleName(), "Could not load image from " + url);
}
});
}
The try { ... } catch { ... } is important, as the marker might be invalid when the drawable becomes available.
basic usage of picasso
Picasso.with(context).load(my_url).into(my_view);
and import the library using gradle
compile 'com.squareup.picasso:picasso:2.5.2'
I dont know why you asking this question because you need an url to load image with Picasso . You can create a function basically like :
public void loadimage(final String loadingUrl){
Picasso.with(getApplicationContext()).load(loadingUrl).into(yourimageview, new Callback() {
#Override
public void onSuccess() {
Log.v("picasso","i successfully created image, here is url : "+loadingUrl);
}
#Override
public void onError() {
}
});
}
I am trying to load an image:
Picasso.with(SelectActivity.this).load(picture).into(new Target() {
#Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
bmp = bitmap;
findViewById(R.id.facebookButton).setEnabled(true);
continueToEditing();
}
#Override
public void onBitmapFailed(Drawable errorDrawable) {
findViewById(R.id.facebookButton).setEnabled(true);
}
#Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
picture is a valid string to a reachable, valid JPEG image. I've got everything inside a try/catch block and I've got breakpoints on onBitmapLoaded, onBitmapFailed, and try/catch's catch block.
However, none of this is called. There is also nothing in logcat related to this, too. What am I doing wrong?
Try keeping a strong reference to the Target object as a class variable and give it a try.
E.g.
Target target;// Class variable
//Now define this on your onCreate method
target = new Target() {
#Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
bmp = bitmap;
findViewById(R.id.facebookButton).setEnabled(true);
continueToEditing();
}
#Override
public void onBitmapFailed(Drawable errorDrawable) {
findViewById(R.id.facebookButton).setEnabled(true);
}
#Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
//Now set the target on the Piccaso load LOC
Picasso.with(SelectActivity.this).load(picture).into(target);
I am using Picasso library to load image from url. The code I used is below.
Picasso.with(getContext()).load(url).placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder).into(imageView);
What I wanna do is to get the image that loaded from url. I used
Drawable image = imageView.getDrawable();
However, this will always return placeholder image instead of the image load from url. Do you guys have any idea? How should I access the drawable image that it's just loaded from url.
Thanks in advance.
This is because the image is loading asynchronously. You need to get the drawable when it is finished loading into the view:
Target target = new Target() {
#Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
imageView.setImageBitmap(bitmap);
Drawable image = imageView.getDrawable();
}
#Override
public void onBitmapFailed(Drawable errorDrawable) {}
#Override
public void onPrepareLoad(Drawable placeHolderDrawable) {}
};
Picasso.with(this).load("url").into(target);
mImageView.post(new Runnable() {
#Override
public void run() {
mPicasso = Picasso.with(mImageView.getContext());
mPicasso.load(IMAGE_URL)
.resize(mImageView.getWidth(), mImageView.getHeight())
.centerCrop()
.into(mImageView, new com.squareup.picasso.Callback() {
#Override
public void onSuccess() {
Drawable drawable = mImageView.getDrawable();
// ...
}
#Override
public void onError() {
// ...
}
});
}
});