Android, je peux mettre AsyncTask dans une catégorie distincte et un rappel?

Je suis en train d'apprendre des AsyncTask et vous voulez l'utiliser comme une catégorie distincte, plutôt que d'une sous-classe.

Par exemple,

class inetloader extends AsyncTask<String, Void, String> {


    @Override
    protected String doInBackground(String... urls) {

        String response = "";

            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(urls[0]);
            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

                BufferedReader buffer = new BufferedReader(
                        new InputStreamReader(content));
                String s = "";
                while ((s = buffer.readLine()) != null) {
                    response += s;
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        return response;
    }


    @Override
    protected void onPostExecute(String result) {
        Log.e("xx",result);
        //how do I pass this result back to the thread, that created me?
    }


}

et le principal(ui) filetage:

inetloader il = new inetloader();
il.execute("http://www.google.com");
//il.onResult()
//{
    ///do something...
//}

Merci!

  • Oui, vous pouvez le mettre dans une catégorie distincte, mais la plupart des gens ne le font pas car son but est généralement beaucoup plus clair si c'est un intérieur de classe. Si vous allez pour les réutiliser dans de nombreuses activités, aller de l'avant.
  • J'ai l'intention de l'utiliser à des fins différentes, comme si je l'appeler à partir d'ici, sur le résultat, il faut le faire et que, si je l'appelle à partir de là, sur le résultat, il devrait faire autre chose... à cet effet si je vais le garder dans la même classe et de l'avoir appeler une fonction de la classe que sur le résultat, je vais devoir faire une nouvelle AsyncTask pour chaque type d'action qu'il a à faire onresult...
  • utilisation de l'interface, juste en œuvre de votre activité par une interface et dans onPostExcute() de Asyn appel de classe mContext.implementedMethod().
  • L'avoir dans une classe séparée aide aussi avec le contrôle de version & de la gestion du changement.
  • BTW pls commencer vos noms de classe avec une lettre majuscule, par exemple "InetLoader" - tout de base Java convention.
InformationsquelleAutor Roger Travis | 2012-05-26