Ich habe Probleme beim Verständnis von AsyncTask. Ich sende einen Dateispeicherort an ihn, damit er ihn abrufen, seine Größe ändern und ihn zurückgeben kann. Wenn ich die asynctask-Klasse von meiner Aktivität, die eine BaseAdapter-ListView ist, aufrufen, erhalte ich einen Typenkonflikt.Abrufen einer BitMap von AsyncTask in Java
Ich dachte, dass ich die Bitmap aus der Ausführung zurückgeben könnte. Ich habe gelesen, dass ich die OnPostExecute() verwenden müssen, aber ich bin nicht sicher, wie ..
public class ImageHandler extends AsyncTask<String, Void, Bitmap> {
Bitmap sizedBMP = null;
@Override
protected Bitmap doInBackground(String... params) {
File imgFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath(), "/"+params[0]+"/"+params[0]+".png");
if (imgFile.exists()){
Bitmap bmp = BitmapFactory.decodeFile(imgFile.toString());
int newWidth = 500;
sizedBMP = getResizedBitmap(bmp, newWidth);
}
else{
//set no image available
}
return sizedBMP;
}
@Override
// Once the image is downloaded, associates it to the imageView
protected void onPostExecute(Bitmap sizedBMP) {
}
public Bitmap getResizedBitmap(Bitmap bm, int newWidth) {
// Bitmap gets resized here.....
}
}
Ich rufe diese Klasse in der getView() wie:
ImageHandler imgHandler = new ImageHandler();
Bitmap bitMap;
bitMap = imgHandler.execute(filename);
Fehler:
Type mismatch: cannot convert from AsyncTask to Bitmap
Jeder besondere Grund, warum Sie nicht [Picasso] (https://github.com/square/picasso), [Glide] (https://github.com/bumptech/glide), [Fresco] (https://github.com/facebook/fresco) oder eine andere Bildladebibliothek? –
Nun, jemand schlug vor, glide, aber ich wollte lernen, wie es funktioniert, denke ich. – silversunhunter