Autore Topic: gestione richiesta GET da web service  (Letto 900 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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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.

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;