адаптер:
Код: Выделить всё
public class GridViewAdapter extends BaseAdapter {
private static class ViewHolder {
TextView name,count_download;
ImageView icon;
Main m;
String id,url_id,script,icon_lnk,icon_name;
}
private Context context;
private List<HashMap<String, String>> arrayList;
private LayoutInflater layoutInflater;
GridViewAdapter(Context context, List<HashMap<String, String>> data) {
this.context = context;
this.arrayList = data;
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
String getName(String s){
int dotIdx = s.lastIndexOf('.');
int bslashIdx = s.lastIndexOf('.');
if (dotIdx != -1 && bslashIdx != -1) {
return s.substring(bslashIdx + 1, dotIdx);
}
return s;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if(convertView == null) {
convertView = layoutInflater.inflate(R.layout.main_activity_item, null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView)convertView.findViewById(R.id.name);
viewHolder.icon = (ImageView)convertView.findViewById(R.id.icon);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)convertView.getTag();
}
Animation animation = AnimationUtils.loadAnimation(context, R.anim.rotate);
viewHolder.name.setText(arrayList.get(position).get("name"));
viewHolder.icon.startAnimation(animation);
viewHolder.script = arrayList.get(position).get("script");
viewHolder.url_id = arrayList.get(position).get("url_id");
viewHolder.id = arrayList.get(position).get("id");
viewHolder.icon_lnk = arrayList.get(position).get("icon");
viewHolder.icon_name = "name12";
new Thread() { //открываем новый поток
@Override
public void run() {
DownloadImage di = (DownloadImage) new DownloadImage(viewHolder.icon,viewHolder.script,viewHolder.id,viewHolder.icon_name).execute("http://192.168.0.20/"+viewHolder.icon_lnk);
try {
for(;;Thread.sleep(500)){ //ждем немного (беконечный цикл ожиданий)
if(di.fin==true){Log.d("MyLog", "Упешная загрузка картинки #"+viewHolder.icon_lnk); break;} //если картинка загружена то выходим из этого цикла
else{Log.d("MyLog", "Попытка загрузки картинки #"+viewHolder.icon_lnk);}
}} catch (InterruptedException e) {e.printStackTrace();}
}
}.start();
return convertView;
}
}Код: Выделить всё
public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
public String ROOT_DIR="FolderName";
public String FileName;
ImageView bmImage; //сама картинка
boolean fin=false; //окончание таска
String contentType, id;
DownloadImage(ImageView bmImage, String contentType, String id, String FileName) {
this.bmImage = bmImage;
this.contentType = contentType;
this.id = id;
this.FileName = FileName+".webp";
}
protected Bitmap doInBackground(String... url) {
String urldisplay = url[0];
Bitmap image = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
image = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
String root = Environment.getExternalStorageDirectory().toString();
File Dir = new File(root + File.separator + ROOT_DIR + File.separator + contentType + id);
Dir.mkdirs();
Log.d("FILE_IMAGE", FileName);
File file = new File (Dir, FileName);
if (file.exists ()) file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
image.compress(Bitmap.CompressFormat.WEBP, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return image;
}
protected void onPostExecute(Bitmap result) {
bmImage.clearAnimation();
bmImage.setImageBitmap(result);
bmImage.setScaleType(ScaleType.FIT_CENTER);
fin=true;
}
}