Archivi tag: OnPostExecute

come scaricare (download) una immagine da web (url) usando AsyncTask in Android

asynctask steps
asynctask steps
LA CHIAMATA
new DownloadImageTask(holder.imageview).execute(urlImgS);


LA ASYNCTASK
		
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
		ImageView bmImage;

public DownloadImageTask(ImageView bmImage) {
	this.bmImage = bmImage;
}

protected Bitmap doInBackground(String... urls) {
	String urldisplay = urls[0];
	Bitmap mIcon11 = null;
	try {
	   InputStream in = new  java.net.URL(urldisplay).openStream();
	mIcon11 = BitmapFactory.decodeStream(in);
	} catch (Exception e) {
	  Log.e("Error", e.getMessage());
	  e.printStackTrace();
	}
	 return mIcon11;
}

protected void onPostExecute(Bitmap result) {
   bmImage.setImageBitmap(result);
}
}
}//AsyncTask
Annunci

Come e quando si usa AsyncTask in android (thread) – code esempio

 

Un’attività asincrona è definita da un calcolo che viene eseguito su un thread (filo o processo) in background (sottofondo) e il cui risultato è condiviso e pubblicato sul thread UI (processo della UI).

android AsyncTask
android AsyncTask (image  lucadentella)

Un thread o thread di esecuzione, in informatica, è una suddivisione di un processo in due o più filoni o sotto processi, che vengono eseguiti con-correntemente da un sistema di elaborazione.

AsyncTask consente un uso corretto e semplice del thread UI (processo o filo principale della Interfaccia Utente).

Questa classe consente di eseguire operazioni in background (sottofondo) e di condividere i loro risultati sul thread UI ossia sul filo o processo dell’interfaccia utente, senza dover gestire processi/fili o utilizzare maipolatori di eventi (handlers).

AsyncTask è stato progettato per essere una classe di supporto per Thread ed Handler e non costituisce framework di thread generico.
AsyncTask dovrebbe idealmente essere utilizzato per operazioni di breve durata (pochi secondi al massimo).

Se è necessario conservare un thread (filo) in esecuzione per lunghi periodi di tempo, si consiglia vivamente di utilizzare le varie API fornite dal pacchetto java.util.concurrent package tali come Executor, ThreadPoolExecutor e FutureTask.

Un compito asincrono è definito da 3 tipi generici, chiamati (params, progress, result), e di 4 momenti (passaggi nel tempo), chiamati respettivamente OnPreExecute, doInBackground, onProgressUpdate e OnPostExecute.

params, progress, result

 

Android Code Esempio AsyncTask

LA CHIAMATA

package com.apps.xxxx.xxxx;

import android.app.Activity;
...
public class MainActivity extends Activity {
   ...
  public GridView gridview;
  @Override
  protected void onCreate(Bundle savedInstanceState)      {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main1);
     
     // Creating a new non-ui thread
     jsonAsyncTask downloadTask = new jsonAsyncTask();
     ...
 }
}


I QUATTRO (TRE) PASSAGGI
(attenzione ai parametri generici...params, progress, result ... String, Void, String)

/** AsyncTask to download json data */
private class jsonAsyncTask extends AsyncTask
<String, Void, String> {

ProgressDialog dialog;
@Override
protected void onPreExecute() {
   super.onPreExecute();
   //dialog
   dialog = new ProgressDialog(MainActivity.this);
   dialog.setTitle("Connecting server  ");
   dialog.setMessage("Loading, please wait");
   dialog.setIndeterminate(true);
   dialog.setCancelable(false);
   dialog.show();
 }
//last param String
  String data = null;

@Override
protected String doInBackground(String... url) {
try{
   data = getJSONString(url[0]);
   }catch(Exception e){
    return "notok";
   }
    return "ok";
  }

/** Invoked by the Android on "doInBackground" is executed */

@Override
protected void onPostExecute(String result) {
dialog.dismiss();
//dialog.cancel();
//adapter.notifyDataSetChanged();
 if(result =="ok") {
  adapter = new ItemAdapter(MainActivity.this, R.layout.row, listitems);
   gridview.setAdapter(adapter);
  }else{
   showToast("Unable to fetch data from server");                
  }//endif
 }//onPosExecute
}//AsyncTask