Autore Topic: ArrayList<Oggetto> contenente List<String>  (Letto 879 volte)

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
ArrayList<Oggetto> contenente List<String>
« il: 01 Marzo 2013, 18:27:35 CET »
0
Ciao a tutti.
Premesso che in Java/Android programmo da poco e la Progr. ad  oggetti è ancora dura da comprendere.
Ho un problema che credo sia stupido anche se trovo difficile spiegarlo, ma ci provo
Ho una semplice classe Ristoranti così strutturata
Codice (Java): [Seleziona]
public class Ristoranti{

    private String id;
    private String aDesc;
    private List<String> photo;
   

   
    public String getId() {
            return id;
    }

    public void setId(String id) {
            this.id = id;
    }

    public String getADesc() {
            return aDesc;
    }

    public void setADesc(String aDesc) {
            this.aDesc = aDesc;
    }


    public List<String> getPhoto() {
            return photo;
    }

    public void setPhoto(List<String> photo) {
            this.photo = photo;
    }

Poi ho una classe Parser che si occupa di parsare un file XML e memorizza i dati estratti nella classe Ristoranti in questo modo
(ho tolto le parti non necessarie x il mio problema)
Codice (Java): [Seleziona]
public class Parser {

        ArrayList<Ristoranti> parsedData=new ArrayList<Ristoranti>();   //struttura dati che immagazzinerà i dati letti
        public ArrayList<Ristoranti> getParsedData() {                                  //metodo di accesso alla struttura dati
                return parsedData;
        }      
       
       
        public void parseXml() {
                Ristoranti rParse = new Ristoranti();
                String parseId;
                String parseADesc;
                List<String> parsePhoto = new ArrayList<String>
                for ... { //Leggo dal file XML i dati che mi servono e li memorizzo in parseId,parseADesc
                   ...
                   rParse.setId(parseId);
                   rParse.setADesc(parseADesc);
                        for ... { //Leggo i dati riguardanti le URL delle foto di quel ristorante e li memorizzo in parsePhoto
                          ...
                          rParse.setPhoto(parsePhoto)
                        }
                        parsedData.add(rParse)  //Memorizzo nell'ArrayList i vari oggetti
                }
        }
}

e fin qui va tutto bene, ho provato a mettere dei Log.d per verificare se memorizza bene in parseId, parseADesc,parsePhoto e tutto va fila liscio mi restituisce:
parseId=1
parseADesc=Ristorante A
parsePhoto(0)=Foto 1 Rist. A
parsePhoto(1)=Foto 2 Rist. A
parsePhoto(2)=Foto 3 Rist. A

parseId=2
parseADesc=Ristorante B
parsePhoto(0)=Foto 1 Rist. B

parseId=3
parseADesc=Ristorante C
parsePhoto(0)=Foto 1 Rist. C
parsePhoto(1)=Foto 2 Rist. C
parsePhoto(2)=Foto 3 Rist. C

il problema sorge nell' Activity che va a richiamare la classe Parser che io richiamo in questo modo
Codice (Java): [Seleziona]
.
.
.

Parser parserSkRist=new Parser()
//Il ciclo for in realtà passa l'Url e altri valori che ho omesso perchè non sono attinenti al problema
for (int i = 0; i < numRistoranti; i++) {       //numRistoranti è 3 (ho controllato anche questo)
        String UrlRistorante=...
        parserSkRist.parseXml(UrlRistorante);  
}
//il problema sorge qui. Io dovrei andare a leggere i dati dei 3 ristoranti che ho memorizzato in parsedData della classe Parser
//ho fatto così ma funziona solo per l'ID e per ADesc mentre x le foto, mi restituisce solo le 3 foto del 3° Ristorante
                for (int i = 0; i < parserSkRist.parsedData.size(); i++) {
                        //il Log di sotto mi restituisce esattamente i dati dei 3 ristoranti
                        Log.d("Rist", "Id="+parserSkRist.parsedData.get(i).getId()+"  Desc="+parserSkRist.parsedData.get(i).getADesc());
                        //Il ciclo di sotto invece mi da sempre le foto del 3° ristorante
                        //ho provato anche con un for each, con un for iterator ma niente il risultato non cambia
                        Iterator<String> it = parserSkRist.parsedData.get(i).getPhoto().iterator();
                        while (it.hasNext()) {
                                String s=it.next();
                                Log.d("RistPhoto", s);
                        }
                }



Avrò fatto degli orrori sicuramente, però fino a quando non richiamo dall'Activity i risultati sono esatti.
Andateci piano con i rimproveri mi raccomando :-)
grazie e ciao.

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:ArrayList<Oggetto> contenente List<String>
« Risposta #1 il: 02 Marzo 2013, 10:55:09 CET »
+1
Ad occhio direi che continui ad usare sempre e solo la stessa lista quando fai il parse delle foto.
Codice (Java): [Seleziona]
public void parseXml() {
  Ristoranti rParse = new Ristoranti();
  String parseId;
  String parseADesc;
  List<String> parsePhoto = new ArrayList<String>
  for ... { //Leggo dal file XML i dati che mi servono e li memorizzo in parseId,parseADesc
    //...
    rParse.setId(parseId);
    rParse.setADesc(parseADesc);
    for ... { //Leggo i dati riguardanti le URL delle foto di quel ristorante e li memorizzo in parsePhoto
       //...
       rParse.setPhoto(parsePhoto)
    }
    parsedData.add(rParse)  //Memorizzo nell'ArrayList i vari oggetti
  }
}

Prova a spostarti la creazione della lista dove aggiungere le foto all'interno del primo ciclo con cui elabori i ristoranti, invece che inizializzarla fuori e usare sempre la stessa:
Codice (Java): [Seleziona]
public void parseXml() {
  Ristoranti rParse = new Ristoranti();
  String parseId;
  String parseADesc;
  // List<String> parsePhoto = new ArrayList<String>
  for ... { //Leggo dal file XML i dati che mi servono e li memorizzo in parseId,parseADesc
    List<String> parsePhoto = new ArrayList<String>(); // per ogni nuovo ristorante voglio una lista di foto nuova di zecca, non sempre la stessa
    //...
    rParse.setId(parseId);
    rParse.setADesc(parseADesc);
    for ... { //Leggo i dati riguardanti le URL delle foto di quel ristorante e li memorizzo in parsePhoto
       //...
       rParse.setPhoto(parsePhoto)
    }
    parsedData.add(rParse)  //Memorizzo nell'ArrayList i vari oggetti
  }
}


Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:ArrayList<Oggetto> contenente List<String>
« Risposta #2 il: 04 Marzo 2013, 09:37:45 CET »
0
Ciao Sakazaki e grazie per avermi risposto, scusa ma solo ora ho visto la tua risposta.
Ho provato quello che dicevi, ma purtroppo non è la soluzione, anche perchè fino a quel punto tutto funziona (voglio dire che la classe Parser mi restituisce i valori giusti). E poi quell'array
Il problema ce l'ho quando dall'Activity vado a richiamare la classe Parser.
Mi da sempre e solo le foto dell'ultimo ristorante.
Io davvero sto impazzendo.
che cosa posso fare???

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:ArrayList<Oggetto> contenente List<String>
« Risposta #3 il: 04 Marzo 2013, 09:47:35 CET »
0
Perdona la domanda, ma hai provato a spostare la creazione della lista dentro al ciclo come suggerito?

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:ArrayList<Oggetto> contenente List<String>
« Risposta #4 il: 04 Marzo 2013, 09:57:36 CET »
0
Scusami Sakazaki, purtroppo quello che tu dicevi non posso provarlo facilmente (il codice che ho postato è un estratto sintetico), comunque credo che il problema sia proprio lì, se hai tempo ti posto il codice completo così ti puoi rendere conto meglio del casino che ho combinato. :-)
Grazie ancora del tempo che mi stai dedicando.


Post unito: 04 Marzo 2013, 10:43:59 CET
Chiedo UMILMENTE scusa  :-[
AVEVI PIENAMENTE RAGIONE
sei il mio salvatore.
Ciao e grazie mille.
« Ultima modifica: 04 Marzo 2013, 10:43:59 CET da MisterHide, Reason: Merged DoublePost »