Renvoi de valeurs booléennes à partir d'AsyncTask
AsyncTasks offre un moyen pratique d'effectuer des opérations en arrière-plan dans les applications Android. Cependant, lorsque vous devez communiquer les résultats d'une AsyncTask au thread principal, comme renvoyer une valeur booléenne, les méthodes de complétion AsyncTask standard peuvent ne pas suffire.
Code original
Considérez le code suivant, où une AsyncTask est utilisée pour établir une connexion FTP :
AsyncConnectTask task = new AsyncConnectTask(SiteManager.this, _address, _username, _password, _port); task.execute();
Dans ce code, l'AsyncConnectTask effectuera l'opération de connexion en arrière-plan et renverra le résultat sous forme de valeur booléenne. Cependant, il n'existe aucun mécanisme pour récupérer cette valeur booléenne dans le thread principal.
Approche d'interface personnalisée
Pour renvoyer une valeur booléenne à partir d'une AsyncTask, vous pouvez créer un interface personnalisée qui sera implémentée dans l'activité ou le fragment qui crée l'AsyncTask. Par exemple :
public interface MyInterface { public void myMethod(boolean result); }
AsyncTask modifiée
L'AsyncTask peut ensuite être modifiée pour implémenter cette interface et transmettre le résultat au thread principal via l'interface :
public class AsyncConnectTask extends AsyncTask<Void, Void, Boolean> { private MyInterface mListener; public AsyncConnectTask(Context context, String address, String user, String pass, int port, MyInterface mListener) { // ... this.mListener = mListener; } @Override protected Boolean doInBackground(Void... params) { // ... return result; } @Override protected void onPostExecute(Boolean result) { if (mListener != null) mListener.myMethod(result); } }
Utilisation
Avec l'interface personnalisée et AsyncTask modifié, vous pouvez exécuter la tâche et recevoir le résultat booléen dans le thread principal :
AsyncConnectTask task = new AsyncConnectTask(SiteManager.this, _address, _username, _password, _port, new MyInterface() { @Override public void myMethod(boolean result) { if (result == true) { // Connection successful } else { // Connection failed } } }); task.execute();
En utilisant cette approche, vous pouvez renvoyer des valeurs booléennes d'AsyncTasks et traiter les résultats sur le thread principal.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!