example ejemplo asynctask android interface android-asynctask listener android-event

ejemplo - asynctask android example



Evento de fuego en AsyncTask finalizado (2)

Me gustaría agregar un evento disparado por el método de ejecución posterior de la clase AsyncTask. Luego, un oyente en la actividad de inicio de sesión se cerrará y la actividad principal estará visible.

onPostExecute() ya es una devolución de llamada, puede crear otra devolución de llamada como la descrita pero no es necesaria. Simplemente pase una referencia de su Actividad de inicio de sesión a su AsyncTask y luego utilícela para llamar a finish() y startActivity() en onPostExecute() .

Mi aplicación tiene una actividad de inicio de sesión y comprueba las credenciales a través de un sitio web de Internet. Para hacerlo, tengo que usar una clase AsyncTask. Cuando el inicio de sesión es exitoso, una variable global se establece en verdadero.

Como esto es asincrónico, la actividad no esperará el resultado, por lo que me gustaría agregar un evento que se active con el método de ejecución posterior de la clase AsyncTask. Luego, un listener en la actividad de inicio de sesión se cerrará y la actividad principal estará visible.

Me gustaría saber si esto es posible y cómo. He intentado algunos ejemplos de otras publicaciones, pero no puedo entenderlo a partir de esos.

Creo que tengo que hacer lo siguiente: - crear una interface en la clase AsyncTask - del método post_execute de esa clase, post_execute el evento, pero ¿cómo? - poner un listener en la actividad de inicio de sesión, pero ¿cómo?

cualquier ayuda es apreciada

Saludos, Eric


Al principio, crea tu clase de publicación, usando Asynctask o IntentService como siguiendo ...

public class PostIntentService extends IntentService implements PostTask.Observer { private int counter = 0; private int retry = 2; private Data mData; public PostIntentService() { super("PostIntentService"); } @Override protected void onHandleIntent(Intent intent) { mData = (Data) intent.getSerializableExtra("data"); // send updating status Intent i = new Intent(); i.setAction(PostResponseReceiver.ACTION_RESPONSE); i.addCategory(Intent.CATEGORY_DEFAULT); i.putExtra("status", "updating"); sendBroadcast(i); execute(); counter++; } @Override public void onSuccessPost(String result) { // send success status Intent i = new Intent(); i.setAction(PostResponseReceiver.ACTION_RESPONSE); i.addCategory(Intent.CATEGORY_DEFAULT); i.putExtra("status", "success"); sendBroadcast(i); } @Override public void onFailedPost(String result) { if (counter < retry) { execute(); counter++; } else { // send failed status Intent i = new Intent(); i.setAction(PostResponseReceiver.ACTION_RESPONSE); i.addCategory(Intent.CATEGORY_DEFAULT); i.putExtra("status", "failed"); i.putExtra("data", mData);// for reproduct sendBroadcast(i); } } private void execute() { PostTask task = new PostTask(this); task.execute(); } }

En el segundo, cree su clase (BroadcastReceiver extendido) que recibe la intención cuando termina una publicación.

public class PostBroadcastReceiver extends BroadcastReceiver { public static final String ACTION_RESPONSE = "com.example.android.intent.action.POST_PROCESSED"; private static final int POST_REQUEST = 100; private Observer mObserver; public PostBroadcastReceiver(Observer observer) { mObserver = observer; } @Override public void onReceive(Context context, Intent intent) { if (intent.getStringExtra("status").equals("updating")) { } else if (intent.getStringExtra("status").equals("success")) { if (mObserver != null) { mObserver.onPostFinished(); } } else if (intent.getStringExtra("status").equals("failed")) { if (mObserver != null) { mObserver.onPostFailed(); } } } public interface Observer { public void onPostFinished(); public void onPostFailed(); } }

Registre este servicio en su archivo Manifest.

<service android:name=".PostIntentService" />

Registre este receptor en Crear su actividad principal.

IntentFilter filter = new IntentFilter(PostBroadcastReceiver.ACTION_RESPONSE); filter.addCategory(Intent.CATEGORY_DEFAULT); receiver = new PostResponseReceiver(this); registerReceiver(receiver, filter);

E implemente el siguiente método en su actividad principal.

public void onPostFinished() { Log.d("onPostFinished", "onPostFinished"); } public void onPostFailed() { Log.d("onPostFailed", "onPostFailed"); }

No olvides Anular el registro de este receptor en Destrucción de tu actividad principal.

unregisterReceiver(receiver);

Finalmente, ejecute la transferencia en su Actividad de inicio de sesión.

Intent intent = new Intent(this, PostIntentService.class); intent.putExtra("data", mData); startService(intent);