Autore Topic: gestione richiesta GET da web service  (Letto 197 volte)

Offline AndFan

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Tattoo
gestione richiesta GET da web service
« il: 05 Luglio 2011, 18:05:57 CEST »
0
Ho una piccola app che scarica un xml e ne mostra il contenuto: più precisamente ho un activity per mostrare i risultati del parsing e un service che fa il lavoro sporco. All'inizio avevo capito che tramite un service avrei separato la parte computazionale onerosa (si, nel mio caso è una parola grossa) dalla parte grafica, mentre ora so che in realtà non è così. Ho visto che posso risolvere usando AsyncTask, però preferirei modificare quello che ho già senza riscrivere troppo.

Far partire un thread che lancia il service è una cavolata? sono aperto ad ogni consiglio

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 941
  • Respect: +156
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:gestione richiesta GET da web service
« Risposta #1 il: 05 Luglio 2011, 18:29:10 CEST »
0
Far partire un thread che lancia il service è una cavolata? sono aperto ad ogni consiglio

Si, fai partire il service e da li lanci un nuovo thread.
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline AndFan

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Tattoo
Re:gestione richiesta GET da web service
« Risposta #2 il: 05 Luglio 2011, 19:03:56 CEST »
0
grazie per la pronta risposta! appena ho nuovamente il pc per lo sviluppo sotto mano provo

ho un dubbio però: attualmente il service fa il parsing dell'xml e salva i dati in un arraylist. L'activity quindi scorre la lista e inserisce ogni elemento in una listview tramite un adapter.
ecco il codice che chiama il service
Codice (Java): [Seleziona]
//avvio il service
startService(new Intent(this,Service.class));
//recupero i dati da visualizzare
lista.addAll(Service.leggidati("http://www.test.it/dati.xml"));
e quindi successivamente la parte che stampa
Codice (Java): [Seleziona]
ArrayList<HashMap<String, Object>> dati=new ArrayList<HashMap<String,Object>>();
                for(int i=0;i<lista.size();i++)
                {
            Persona l=lista.get(i);// per ogni dato
           
            //hashmap per rappresentare correttamente i dati
            HashMap<String,Object> datoMap=new HashMap<String, Object>();//creo una mappa di valori
           
          //aggiunta degli elementi alla hashmap
            datoMap.put("nome", l.getNome());
            datoMap.put("prof", l.getCognome());
   
            dati.add(datoMap);  //aggiungiamo la mappa di valori alla sorgente dati
        }
               
        String[] from={"nome","cognome"}; //
        int[] to={R.id.result2nome,R.id.result2cognome};//id delle view
               
      //costruzione dell adapter
        SimpleAdapter adapter=new SimpleAdapter(
                        getApplicationContext(),
                        dati,//ovvero la sorgente dati
                        R.layout.result2row, //layout contenente gli id nome e cognome"
                        from,
                        to);
       
        //utilizzo dell'adapter
        ((ListView)findViewById(R.id.MyListView)).setAdapter(adapter);


qui invece ecco come il service salva i dati
Codice (Java): [Seleziona]
static ArrayList<Persona> leggidati(String xmlUrl){
                ArrayList<Persona> elenco = new ArrayList<Persona>();
                //parte che fa il parsing e inserisce il tutto in un nuovo oggetto persona
                //...
//aggiungo newPersona all'elenco
elenco.add(newPersona);
return elenco;