I am trying to load multiple images from some urls using picasso library.
So far I have tried this code:
for(int i = 0; i < friends.size(); i++)
{
final Profile profile = friends.get(i);
String url = profile.getUserImageUrl();
Picasso.with(getContext()).load(url).into(new Target() {
// It doesn't reach any of the code below ....!!
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
profile.setUserImage(bitmap);
counter++;
if(counter >= friends.size() - 1)
cards();
}
@Override
public void onBitmapFailed(Drawable drawable) {
Log.e("App", "Failed to load company logo in onBitmapFailed method");
}
@Override
public void onPrepareLoad(Drawable drawable) {
Log.e("App","Failed to load company logo in onBitmapFailed method");
}
});
}
This code doesn't work. When I run this code it doesn't reach to any line within the Target interface. Someone have any ideas for why?
Maybe I'm missing something here, but I think into()
accepts only an ImageView
and an optional Callback
. Can you do something like this:
Picasso
.with(getContext())
.load(profile.getUserImageUrl())
.into(imageView, new Callback()
{
@Override
public void onSuccess()
{
// Update card
}
@Override
public void onError()
{
Log.e("App","Failed to load company logo");
}
});
But let's try this: I'm guessing you're either trying to add profile images to a bunch of existing views, or dynamically trying to create those views as you loop over all the profiles. Here's the solution for both cases:
for (int i = 0; i < friends.size(); i++)
{
Profile profile = friends.get(i);
if (profile != null)
{
/** Either find an existing view like this: **/
// You're assembling a resource ID here.
String resourceName = "profile_" + profile.getId(); // Assuming you have an ID.
int resourceId = getResources().getIdentifier(resourceName, "id", getActivity().getPackageName());
// Use it to get the image view in your activity's layout.
ImageView imageView = (ImageView) findViewById(resourceId);
if (imageView != null)
{
Picasso
.with(this)
.load(profile.getUserImageUrl())
.into(imageView);
}
/** Or inflate a View like this: **/
// Get a containing view. You should move this above your
// loop--it's here so I can keep these blocks together.
FrameLayout frameLayout = (FrameLayout) findViewById(R.layout.frame_layout);
// This is a layout that contains your image view and
// any other views you want associated with a profile.
View view = LayoutInflater.from(this).inflate(R.layout.profile_layout, null, false);
// You're finding the view based from the inflated layout, not the activity layout
ImageView imageView = (ImageView) view.findViewById(R.id.image_view);
if (imageView != null)
{
Picasso
.with(this)
.load(profile.getUserImageUrl())
.into(imageView);
}
frameLayout.addView(view);
}
}