Autore Topic: Problema con AsyncTask  (Letto 665 volte)

Offline barns

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Problema con AsyncTask
« il: 23 Dicembre 2012, 16:02:36 CET »
0
Ciao ragazzi, sto provando a creare una delle mie prime applicazioni, che prende dati da un sito e li visualizzi all'utente. Sono riuscito a fare più di qualcosa ma quello che ho fatto non è compatibile con android da 4.0 in poi. Ho letto che serve la classe AsyncTask ma non riesco proprio a capire come farla funzionare.

Allora questo è il codice della MainActivity:
Codice (Java): [Seleziona]
public class MainActivity extends Activity {
                protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                Document doc = null;
                Document doc2 = null;
               
                final Map<String, Integer> map1 = new HashMap<String, Integer>();
                final Map<String, Integer> map2 = new HashMap<String, Integer>();

                final List<String> people = new ArrayList<String>();

               
                try {
                        doc = Jsoup.connect(url1)get();
                        doc2 = Jsoup.connect(url2).get();
                        Elements sen = doc.select("option > select");
                                Elements dep = doc2.select("option > select");
         
                                    for (Element e : sen){
                                         map1.put(e.text(), (Integer.parseInt(e.attr("value"))));                          
                                  people.add(e.text());
                                        }
         
                                 for(Element e: dep){
                                          map2.put(e.text(), (Integer.parseInt(e.attr("value"))));
                                          people.add(e.text());
                                 }
                         
           
                       
                }       catch (IOException e) {
                        e.printStackTrace();
                }
               
               
final AutoCompleteTextView autocomplete = (AutoCompleteTextView) findViewById(R.id.autocomplete);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                                this,
                                android.R.layout.simple_dropdown_item_1line,
                                people
                        );
 autocomplete.setAdapter(adapter);
               
        }

       

}

Questo codice fa quello che deve fare, cioè prende dei nomi e al momento della digitazione di un nome nella TextView di autocompletamento fa apparire i nomi uguali a quelli presenti nella lista creata.

A questo punto devo inserire la classe AsyncTask per fare in modo che funzioni anche con ICS e Jelly Bean.

Mi potreste aiutare a capire come fare? Ho letto tante guide a proposito ma non sono ancora riuscito ad applicarla al mio codice.

Grazie

Offline davraf

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GT-I9001
  • Sistema operativo:
    Android 2.3.6, Kernel 2.6.35.7
Re:Problema con AsyncTask
« Risposta #1 il: 23 Aprile 2013, 10:43:43 CEST »
0
ciao,
visto che per me è un argomento caldo provo a darti una mano: comincia da qui http://www.anddev.it/index.php/topic,10773.msg57505.html#msg57505

la classe AsyncTask è una classe che ha un costrutto molto particolare che vuole obbligatoriamente tre parametri, uno in entrata e due in uscita. quando non li usi devi indicarli come Void. questa classe è obbligatoria per tutti gli android dal 4 in avanti ma scommetterei anche per il 3.
Nell'esempio più in fondo che ho postato trovi la mia classe completa. Se hai problemi bussa pure.


Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Problema con AsyncTask
« Risposta #2 il: 23 Aprile 2013, 17:30:30 CEST »
0
Non é che é obbligatorio utilizzare AsyncTask su Android 4.0+. Quello che é obbligatorio é non fare chiamate network nel main thread, perché la UI si blocca.
L'AsyncTask, avendo il metodo doInBackground() eseguito in un thread diverso da quello UI, é una possibile soluzione al problema.
Il sito ufficiale spiega bene come funziona il tutto: AsyncTask | Android Developers
Postate il LogCat LogCat LogCat LogCat LogCat

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Problema con AsyncTask
« Risposta #3 il: 24 Aprile 2013, 09:11:07 CEST »
0
Non é che é obbligatorio utilizzare AsyncTask su Android 4.0+. Quello che é obbligatorio é non fare chiamate network nel main thread, perché la UI si blocca.
L'AsyncTask, avendo il metodo doInBackground() eseguito in un thread diverso da quello UI, é una possibile soluzione al problema.
Il sito ufficiale spiega bene come funziona il tutto: AsyncTask | Android Developers

Aggiungo che, nelle versioni precedenti ad Android 4.0, non veniva sollevata una eccezione nel momento in cui si effettuava una chiamata network nel main Thread, ma la UI rimaneva bloccata lo stesso (e all'utente viene data facoltà di chiudere l'applicazione...!!)
Quindi anche nelle versioni precedenti, andrebbero eliminate le chiamate nel main Thread.