Come restituire un Bitmap da un'attività di Async nell'applicazione Android

Ok, quindi questo codice è proprio fuori dal sito Android Developer che imposta un ImageView in un Bitmap :

 class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; private int data = 0; public BitmapWorkerTask(ImageView imageView) { // Use a WeakReference to ensure the ImageView can be garbage collected imageViewReference = new WeakReference<ImageView>(imageView); } // Decode image in background. @Override protected Bitmap doInBackground(Integer... params) { data = params[0]; return decodeSampledBitmapFromResource(getResources(), data, 100, 100)); } // Once complete, see if ImageView is still around and set bitmap. @Override protected void onPostExecute(Bitmap bitmap) { if (imageViewReference != null && bitmap != null) { final ImageView imageView = imageViewReference.get(); if (imageView != null) { imageView.setImageBitmap(bitmap); } } } } 

E fondamentalmente, quello che voglio fare è invece di fare

  • Ormlite si unisce in tre tavoli
  • SDK Location non trovato Android Studio + Gradle
  • Errore ERROR_RECOGNIZER_BUSY con riconoscimento vocale offline
  • Larghezza del button in Android TableLayout
  • Il ricevitore di trasmissione Android non funziona
  • Come disabilitare onItemSelectedListener da invocare quando si imposta l'elemento selezionato per codice
  • imageView.setImageBitmap(bitmap); Voglio restituire quel Bitmap modo da poterlo utilizzare nel mio UI principale. C'è qualche modo di fare questo? Mi dispiace per la mia mancanza di conoscenza su AsyncTask , ho appena iniziato ad imparare di recente. Grazie!

  • Flusso di lavoro di fatturazione in-app in un ListView
  • java.lang.ClassNotFoundException in dalvik.system.BaseDexClassLoader.findClass
  • Come get il mio valore attributo definito nel mio stile
  • Come usare NDK? A partire da app 'hello world' app
  • Imansible trovare la libreria di supporto preferenziale v7 in Eclipse ADT
  • javax.net.ssl.SSLException: certificato server non attendibile
  • 4 Solutions collect form web for “Come restituire un Bitmap da un'attività di Async nell'applicazione Android”

    In realtà non c'è bisogno di restituire bitmap e di utilizzarlo nella principale Ui Thread. È ansible eseguire questa operazione su PostExecute se si esegue PostExecute in Thread UI. La tua domanda?? Sì è ansible restituire bitmap da AsynTask è ansible fare qualcosa di simile

     private class myTask extends AsyncTask<Void,Void,Bitmap>{ protected Bitmap doInBackground(Void... params) { //do stuff return bitmap; } @Override protected void onPostExecute(Bitmap result) { //do stuff } } 

    Ora è ansible get bitmap chiamando

      Bitmap returned_bitmap = new myTask().execute().get() 

    Ancora una volta questo non è buono questo appenderà il tuo UI. Ma puoi get valore da Aysnc come questo.

    Un altro metodo che puoi fare è implementare la callback utilizzando l'interface

     public interface MyInterface { public void onPostExecute(); } 

    Classe attività

      public class MyActivity extends Activity implements MyInterface{ private Bitmap Image; public void onCreate(Bundle b) { super.onCreate(b); new MyTask(this).execute(); } @Override public void onPostExecute() { //Now you have your bitmap update by do in background //do stuff here } private class MyTask extends AsyncTask<Void, Void, Void> { MyInterface myinterface; MyTask(MyInterface mi) { myinterface = mi; } @Override protected Void doInBackground(Void... params) { //firt declare bitmap as class member of MyActivity //update bitmap here and then call myinterface.onPostExecute(); return null; } } } 

    Dovresti risparmiare un sacco di tempo e utilizzare Picasso . Questo ti salverà tutto questo codice e funziona con bitmap. Fondamentalmente scriverai qualcosa di simile:

     Picasso.with(context).load("www.somthing.com/api/blah").placeholder(R.drawable.default_picture).into(imageView); 

    È una row di codice e hai Async e caching gratuitamente …

    È ansible utilizzare un metodo di callback tramite l'interface o mettere l'asynctask come class interna e call solo il metodo per impostare l'image …

    Per il richiamo c'è un buon esempio qui .

    Prima di tutto, onPostExecute viene eseguito sul thread UI, quindi non è necessario fare onPostExecute l'esempio. Ma puoi sempre usare le classi anonime se vuoi:

     public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { AsyncTask task = new BitmapWorkerTask() { @Override public void onPostExecute(Bitmap bitmap) { // Do whatever } }; task.execute(); } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.