Picasso Not Loading Images From Server - android

My problem statement is to load the images from the server.
Now I have used picasso inside the custom adapter.
The image which I am downloading its size is approximately 100kb
not more than that.But instead of displaying the image white background is
been displayed.
To check error I have used callback but somehow the callback is not working
I mean the callback is never getting called.
Below is my code
#Override
public void onBindViewHolder(FolderListAdapter.Viewholder holder, int position) {
userDetails=userList.get(position);
//Context context=);
if(userDetails.getLogo()!=null && !userDetails.getLogo().isEmpty()) {
Context context=holder.cardProfilePic.getContext();
Picasso.with(context)
.load(userDetails.getLogo())
.fit()
.into(holder.cardProfilePic, new Callback() {
#Override
public void onSuccess() {
Log.d("succes","success");
}
#Override
public void onError() {
Log.d("failure","failure");
}
});
}
if(userDetails.getBanner()!=null && !userDetails.getBanner().isEmpty()) {
Picasso.with(context)
.load(userDetails.getBanner())
.resize(300,300)
.into(holder.cardBackgroundPic);
}
if(userDetails.getPersonName()!=null && !userDetails.getPersonName().isEmpty()) {
holder.username.setText(userDetails.getPersonName());
}
if(userDetails.getDesignation()!=null && !userDetails.getDesignation().isEmpty()) {
holder.userRole.setText(userDetails.getDesignation());
}
}

Related

Checking if imageView is empty with Picasso

I have database table, there is a column "image_link", so when I open activity, class Picasso get this image_link and show me image. But now I also may have path to image in my column instead of imageLink, but I need show image in any case, I think that it will work if I will do something like that:
#Override
public void onBindViewHolder(#NonNull ViewHolder holder, int position) {
Picasso.get().load(favouriteTemplates.get(position).getImageLink()).into(holder.icon);
if(holder.icon.getDrawable() == null){
Picasso.get().load(new File(favouriteTemplates.get(position).getImageLink())).into(holder.icon);
}
}
But I know, that it takes some time to download image into imageview with Picasso, so my "if" always is true. How can I solve it?
Picasso.get()
.load(favouriteTemplates.get(position).getImageLink())
.into(holder.icon),
new Callback() {
#Override
public void onSuccess() {
//Do Nothing
}
#Override
public void onError(Exception e) {
Picasso
.get()
.load(newmFile(favouriteTemplates.get(position).getImageLink()))
.into(holder.icon);
}
}
);

How can I keep pictures in memory with Picasso?

I'm viewing some pictures using recyclview with Picasso.
These images are a bit too much to recompile in recyclerview and when I go up again, it reloads the pictures, and if the pictures are too big, or the network access is bad, it does not look nice.
I wonder how can I cache the pictures I called with loadUrl with Picasso. Is this possible with Picasso?
As an example I can give Instagram. Every time I go back to another activity, it loads the picture again and affects the performance of the application. If you teach me how to keep the pictures in memory, or if you show me a source, I'm happy. Thanks in advance.
My Code:
adapter = new FirebaseRecyclerAdapter<WallPaperItem, ListWallPaperViewHolder>(options) {
#Override
protected void onBindViewHolder(#NonNull final ListWallPaperViewHolder holder, int position, #NonNull final WallPaperItem model) {
Picasso.with(getBaseContext())
.load(model.getImageLink())
.networkPolicy(NetworkPolicy.OFFLINE)
.into(holder.wallpaper, new Callback() {
#Override
public void onSuccess() {
}
#Override
public void onError() {
Picasso.with(getBaseContext())
.load(model.getImageLink())
.error(R.drawable.ic_wallpaper_black_24dp)
.into(holder.wallpaper, new Callback() {
#Override
public void onSuccess() {
}
#Override
public void onError() {
Log.e("ERROR","None");
}
});
}
});
holder.setItemClickListener(new ItemClickListener() {
#Override
public void onClick(View view, int position) {
Intent intent = new Intent(ListWallPaper.this,ViewWallPaper.class);
Common.selected_background = model;
Common.select_background_key = adapter.getRef(position).getKey();
startActivity(intent);
}
});
why you use
.into(holder.wallpaper, new Callback() {}
and check new callback
try this
Picasso.get().load(model.getImageLink())
.networkPolicy(NetworkPolicy.OFFLINE)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.ic_wallpaper_black_24dp)
.into(holder.wallpaper);
maybe it help

Fresco ControllerBuilder CPU usage

I am trying to show a loading icon when the image hasn't loaded yet and hide the loading icon when the image is ready. I am using Fresco library and I used the code below successfully to implement what I want:
private void loadImage(ImageView imageview,final ImageView videoicon, final GifTextView progressbar, Uri uri,final boolean video,final boolean child,boolean isConnectivity)
{
if (child)
{
if (isConnectivity)
progressbar.setBackgroundResource(Theme.Icons.LoadingChild);
}
else
{
progressbar.setBackgroundResource(Theme.Icons.LoadingMain);
}
SimpleDraweeView imageDrawee = (SimpleDraweeView) imageview;
ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
#Override
public void onFinalImageSet(String id, #Nullable ImageInfo imageInfo, #Nullable Animatable anim) {
if (imageInfo == null) {
return;
}
progressbar.setVisibility(View.GONE);
if (video)
{
if (child)
{
videoicon.setImageResource(Theme.Icons.MediaGalleryVideoIcon);
}
else
{
linearlayout_mediagalleryvideoicon.setVisibility(View.VISIBLE);
videoicon.setImageResource(Theme.Icons.MediaGalleryVideoIcon);
}
}
}
#Override
public void onIntermediateImageSet(String id, #Nullable ImageInfo imageInfo) {
//FLog.d("Intermediate image received");
}
#Override
public void onFailure(String id, Throwable throwable) {
//FLog.e(getClass(), throwable, "Error loading %s", id)
}
};
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setControllerListener(controllerListener)
.setOldController(imageDrawee.getController())
.setUri(uri)
.build();
imageDrawee.setController(controller);
}
My problem is that when I close the Fragment, I can see from the Android Monitor that the DraweeController continue using CPU. When I open 20-30 Fragment that contain one image, my application crashes because of heavy CPU load.
How to overcome this problem?
The problem wasn't with Fresco library, but with the library I used to display GIF images.

Images are not stored in the cache

I have this method, everything is worked perfectly but images always got from server and not load from cache! what happened ?
public static void makeImageRequest(String Unique_ID, final View parentView, final int id) {
String url = FILE_UPLOAD_FOLDER + Unique_ID + ".png";
final int defaultImageResId = R.drawable.user;
// Retrieves an image specified by the URL, displays it in the UI.
ImageCacheManager.getInstance().getImage(url, new ImageListener() {
#Override
public void onErrorResponse(VolleyError error) {
ImageView imageView = (ImageView) parentView.findViewById(id);
imageView.setImageResource(defaultImageResId);
}
#Override
public void onResponse(ImageContainer response, boolean isImmediate) {
if (response.getBitmap() != null) {
ImageView imageView = (ImageView) parentView.findViewById(id);
imageView.setImageBitmap(response.getBitmap());
} else if (defaultImageResId != 0) {
ImageView imageView = (ImageView) parentView.findViewById(id);
imageView.setImageResource(defaultImageResId);
}
}
});
}
Just use Picasso instead ImageCacheManager. Picasso is a powerful image downloading and caching library for Android. Images add much-needed context and visual flair to Android applications. Picasso allows for hassle-free image loading in your application—often in one line of code!
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
Here also can manage whether the image is successfully downloaded or it fails:
Picasso.with(context)
.load("http://i.imgur.com/DvpvklR.png")
.into(imageView, new Callback() {
#Override
public void onSuccess() {
// your code
}
#Override
public void onError() {
// your code
}
});
You should only add this line in your gradle:
compile 'com.squareup.picasso:picasso:2.5.2'
Hope it helps!

Slideshow with Picasso

I'm displaying multiple images from our server as a slideshow with a ImageSwitcher. Before the ImageSwitcher gets initialized I want to preload the images with Picasso library.
I want to say that I use Picasso with an interceptor, because our server requires Basic Authentication for the images.
My current preloading:
final int[] downloadedCounter = {0};
for (int i = 0; i < images.size(); i++) {
final SlideshowImage image = images.get(i);
PicassoUtils.getPicassoWithBasicAuthorizationFrom(user, getContext())
.load(image.getImageUrl())
.fetch(new Callback() {
#Override
public void onSuccess() {
downloadedCounter[0]++;
if (downloadedCounter[0] == images.size()) {
callback.downloadFinished();
}
}
#Override
public void onError() {
}
});
}
And that is my ImageSwitcher:
ImageView image = (ImageView) this.getNextView();
PicassoUtils.getPicassoWithBasicAuthorizationFrom(user, getContext())
.load(imageUrl)
.noFade()
.into(image, new Callback() {
#Override
public void onSuccess() {
showNext();
}
#Override
public void onError() {
}
});
But the problem is, that it won't get cached, because when I use .networkPolicy(NetworkPolicy.OFFLINE) on Picasso in my ImageSwitcher nothing gets loaded.
And everytime i call showNext() in my ViewSwitcher the used memory of the device rises a bit.

Categories

Resources