I\'m using Picasso library to download images from URL. This is my first attempt on Picasso
Scenario : I want to download some images from server and store them into a
This is perfect answer and I've tested it and works like a charm. You need to use a dedicated thread to retrieve multiple images from network.
private class loadImg extends AsyncTask<Void,Integer,Void> {
@Override
protected Void doInBackground(Void... params) {
try {
for(int i=0;i<mAdapter.getItemCount();i++){
Object object = mAdapter.getItem(i);
final String link = object.getImageLink();//"YOUR IMAGE LINK OR STRING";
if(link!=null && !link.isEmpty()) {
Bitmap bitmap = Picasso.with(context).load(link).get();
publishProgress(i);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
mAdapter.notifyItemChanged(values[0]);
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
Call your AsyncTask any where in the Main thread.
new loadImg().execute;
final ImageView iv = new ImageView(context);
Picasso.with(context).load(resultImageUrl).into(iv,
new Callback() {
@Override
public void onSuccess() {
// Picasso successfully loaded image from resultImageUrl
Bitmap bitmap = ((BitmapDrawable)
iv.getDrawable()).getBitmap();
ImageStorage.saveToSdCard(context, bitmap, imageName);
onFinishDownloading(results);
}
@Override
public void onError() {
// Picasso has failed to load image from resultImageUrl
onFinishDownloading(results);
}
});
Try this way,hope this will help you to solve your problem.
static int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (int i = 0; i < url.length; i++)
{
// url is String array which has 2 urls.
Picasso.with(this).load(url[i])
.into(new Target() {
@Override
public void onPrepareLoad(Drawable arg0) {
// TODO Auto-generated method stub
}
@Override
public void onBitmapLoaded(Bitmap arg0, LoadedFrom arg1) {
// TODO Auto-generated method stub
arg0 = Bitmap.createScaledBitmap(arg0, 150, 150, true);
++count; // Incrementing the count by 1
filePath = saveFile(arg0); // I'm just calling this function to check how many times `onBitmapLoaded` is called. And it is called only once...!!
}
@Override
public void onBitmapFailed(Drawable arg0) {
// TODO Auto-generated method stub
}
});
}
}
public String saveFile (Bitmap bm)
{
Toast.makeText(getApplicationContext(), ""+count, 100).show(); // Displaying the value of count, which always display as **2**.
return "";
}
Picasso.with(MainActivity.this).load(Uri.parse(card.getField("profile_picture_url"))).into(viewHolder.tvPersence);
use this code in your getView()
method.
Picasso.with(context).load(url).into(imageview);
in this approach image loading is depends on the speed of your internet to download the image..
Don't use the method in this way rather make a call and depending upon the response call the next call . Like method1 -> error(), result
Handle the list of url at both of them and call the same method.