Complementando el artículo de la semana pasada (ANDROID – ASYNCTASK), hay ocasiones que es necesario regresar o informar a la clase que “llama” al proceso asíncrono para continuar con la rutina.
En Android existen varias formas, una puede ser creando los “Event Listener”. Un “Event Listener” es algo parecido a “Delegates” en C#.
Bueno, para comenzar creamos una “Interfaz”
public interface OnMyDbHelperEventListener { public void onDatabaseOpened(); } |
En la clase donde ejecutamos el proceso asíncrono, creamos una variable privada de tipo “OnMyDbHelperEventListener” e implementamos su respectivo “setter”.
public class MyHelper extends SQLiteOpenHelper { private MyDatabaseTask myDatabaseTask; private OnMyDbHelperEventListener onMyDbHelperEventListener; //TODO all your own variables public void setOnMyDbHelperEventListener(OnMyDbHelperEventListener onMyDbHelperEventListener){ this.onMyDbHelperEventListener = onMyDbHelperEventListener; } //TODO all your own methods } |
Agredamos en el método “onPostExecute” de la clase asíncrona, la siguiente sentencia:
@Override protected void onPostExecute(SQLiteDatabase sqliteDatabase) { myDatabaseTask = null; // This fragment of code we have to add if(onMyDbHelperEventListener != null){ onMyDbHelperEventListener.onDatabaseOpened(); } } |
Por último, en la clase que crea “MyHelper” y manda a llamar el método “open()” tendría que implementar o crear los métodos de la interfaz “OnMyDbHelperEventListener”
public class MainActivity extends FragmentActivity implements OnMyDbHelperEventListener { //My own properties protected void onCreate(Bundle savedInstanceState) { //My own code MyHelper myHelper = new MyHelper(); myHelper.setOnMyDbHelperEventListener(this); } @Override public void onDatabaseOpened(){ //Read the tables or your own stuff } } |
Bueno, esperando sea de ayuda este código.