Maison >Java >javaDidacticiel >Comment renvoyer des valeurs booléennes à partir d'une AsyncTask Android ?

Comment renvoyer des valeurs booléennes à partir d'une AsyncTask Android ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-14 19:15:18938parcourir

How to Return Boolean Values from an Android AsyncTask?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn