Autore Topic: Passaggio di List tra classi.  (Letto 1008 volte)

Offline TheRedFox

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus one
  • Play Store ID:
    RedFox Labs
  • Sistema operativo:
    Debian lenny 5.0, Windows XP
Passaggio di List tra classi.
« il: 04 Agosto 2011, 17:09:19 CEST »
0
Salve a tutti, ho un problema che mi sta facendo letteralmente impazzire.
Sto cercando di creare un app con un piccolo radar che segni la presenza di eventuali punti nelle vicinanze.
Per fare questo ho creato un metodo che prendendo i dati(latitudine e longitudine) da un database ne calcola la distanza e il bearing, fin qui tutto ok.
Per poter passare i dati alla mia customview ho deciso di metterli all' interno di una lista che secondo i messaggi di log viene adeguatamente riempita.
per poter prendere la lista dalla custom ho creato il metodo returnedList() :
Codice (Java): [Seleziona]
public List<netlocations> returnList() {
        return net;
    }
netlocations è una classe creata appositamente per riempire la lista con dei parametri ben definiti.
Nella customview ho invece il metodo drawPoints che serve per disegnare i vari puntini sul radar, eccolo:
Codice (Java): [Seleziona]
public void drawPoints(Canvas canvas, List<netlocations> netreturned) {
                if(netreturned.size()>0) {
                        for(int i = 0; i<netreturned.size(); i++) {
                                netlocations net = netreturned.get(i);
                                float cx = //x
                                float cy = //y
                       
                                canvas.drawCircle(cx, cy, circleRadius, circlePaint);
                        }
                }
                else {
                        Log.d("MSG", "lista vuota");
                }
        }

il problema è che dopo aver prelevato la lista con :
Codice (Java): [Seleziona]
List<netlocations> returned = new ArrayList<netlocations>();
returned = act.returnList();
Log.d("returned", Integer.toString(returned.size()));
La lista risulta sempre vuota?

Qualcuno potrebbe aiutarmi per favore? non so piu dove sbattere la testa :-D

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Passaggio di List tra classi.
« Risposta #1 il: 04 Agosto 2011, 18:16:46 CEST »
0
Potresti postare un po piu di codice?
Cosi non si puo capire dove sta il problema.
cos'è act?

Offline TheRedFox

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus one
  • Play Store ID:
    RedFox Labs
  • Sistema operativo:
    Debian lenny 5.0, Windows XP
Re:Passaggio di List tra classi.
« Risposta #2 il: 04 Agosto 2011, 18:40:19 CEST »
0
Ok ecco un po di codice, questa è la classe netlocations:
Codice (Java): [Seleziona]
public class netlocations {
        String name;
        float distance;
        float direction;
       
        public netlocations(String name, float distance, float direction) {
                this.name = name;
                this.distance = distance;
                this.direction = direction;
        }
       
        public netlocations() {}
       
        public String getName() {
                return name;
        }
       
        public float getDistance() {
                return distance;
        }
       
        public float getDirection() {
                return direction;
        }
}

act è un istanza della della classe act2, che praticamente è l' activity che fa uso di netlocations per salvare i dati nell' arraylist.

praticamente dall' activity principale(act2) prelevo i dati da un database e se i punti di interesse sono piu vicini di un km li salvo in un arraylist con:
Codice (Java): [Seleziona]
if(dist<1000) {
                                        net.add(new netlocations(name, dist, direction));
                                        Log.d("net", Integer.toString(net.size()));
                                }

poi tramite il metodo returnList() che non fa altro che ritornare la lista appena creata prelevo i dati dalla customview.
Questo è il codice della customView:
Codice (Java): [Seleziona]
List<netlocations> returned = new ArrayList<netlocations>();
returned = act.returnList();
Log.d("returned", Integer.toString(returned.size()));

public void drawPoints(Canvas canvas, List<netlocations> netreturned) {
                if(netreturned.size()>0) {
                        for(int i = 0; i<netreturned.size(); i++) {
                                netlocations net = netreturned.get(i);
                                float cx = //x
                                float cy = //y
                       
                                canvas.drawCircle(cx, cy, circleRadius, circlePaint);
                        }
                }
                else {
                        Log.d("MSG", "lista vuota");
                }
        }

ovviamente è solo parte del codice, poi ce la funzione onDraw() che disegna tutto sulla view.
Il problema di base è che non riesco a trasferire l' arraylist dall' activity principale alla customview.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Passaggio di List tra classi.
« Risposta #3 il: 05 Agosto 2011, 11:40:28 CEST »
0
Prova qualcosa del genere:
Codice (Java): [Seleziona]
class act2 extends Activity{
.....

.....
   if(dist<1000) {
           net.add(new netlocations(name, dist, direction));
           Log.d("net", Integer.toString(net.size()));
   }
   myCustomView.setLocations(net);  //myCustomView è l'istanza di CustomView (prelevata probabilmente tramite getViewById) e gli passi i dati
}

Codice (Java): [Seleziona]
class CustomView extends View{
List<netlocation> netlocationlist=new List<netlocation>();
...
public void drawPoints(Canvas canvas) {
//ora qui usi this.netlocationlist
}
...


public void setNetLocations(List<netlocation> l){
this.netlocationlist=l;
}
}

Guarda questo esempio
[facile] Grafica semplice tramite Canvas - Android Developers Italia
il metodo updatePosition non riceve parametri perche fa un random, ma nel tuo caso potresti passargli dei dati, ad esempio una lista.

Il tuo codice attuale non funziona perche probabilmente reistanzi act2 con un act=new act2(); all interno della tua CustomView (non si istanziano mai le activity manualmente) e quindi la lista a quel punto è vuota.
« Ultima modifica: 05 Agosto 2011, 11:47:22 CEST da Qlimax »

Offline TheRedFox

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus one
  • Play Store ID:
    RedFox Labs
  • Sistema operativo:
    Debian lenny 5.0, Windows XP
Re:Passaggio di List tra classi.
« Risposta #4 il: 05 Agosto 2011, 17:35:57 CEST »
0
Grazie mille, ma ho gia risolto in diverso modo.
Praticamente passo alla customview i valori di distanza e direzione(bearing) che li salva in una sua lista.
Ecco il codice:
Codice (Java): [Seleziona]
if(dist<1000) {
        custom.putData(name, dist, direction);
        Log.d("AGG", "Aggiunto");
}

Codice (Java): [Seleziona]
List<netlocations> returned = new ArrayList<netlocations>();
public void putData(String name, float dist, float direc) {
        returned.add(new netlocations(name, dist, direc));
}

Grazie comunque per l' interessamento :-D

Offline Giovanni D'Addabbo

  • Utente normale
  • ***
  • Post: 163
  • Respect: +8
    • Google+
    • giovannid
    • giovanni.daddabbo
    • magoscuro
    • Mostra profilo
    • Rhubbit.it - Sviluppo app Android/iOs
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Rhubbit srl
  • Sistema operativo:
    Windows/Mac/Linux
Re:Passaggio di List tra classi.
« Risposta #5 il: 08 Agosto 2011, 10:48:17 CEST »
0
ma la tua struttura (lista nella fattispecie) ha implementato il singleton pattern? Da quello che leggo no...è ovvio che se crei un oggetto quello poi risulta nuovo perchè è un nuovo oggetto non uno già esistente ;)

Usa il singleton pattern Altrimenti non riuscirai mai a scambiare dati in modo efficiente e sicuro tra un'activity e l'altra ;)

ecco qui: [facile] Passaggio di dati tra un'activity ed un'altra - Android Developers Italia


Offline TheRedFox

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus one
  • Play Store ID:
    RedFox Labs
  • Sistema operativo:
    Debian lenny 5.0, Windows XP
Re:Passaggio di List tra classi.
« Risposta #6 il: 08 Agosto 2011, 13:25:35 CEST »
0
No no l' avevo utilizzato, comunque grazie adesso so una cosa in più :-D

Offline Giovanni D'Addabbo

  • Utente normale
  • ***
  • Post: 163
  • Respect: +8
    • Google+
    • giovannid
    • giovanni.daddabbo
    • magoscuro
    • Mostra profilo
    • Rhubbit.it - Sviluppo app Android/iOs
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Rhubbit srl
  • Sistema operativo:
    Windows/Mac/Linux
Re:Passaggio di List tra classi.
« Risposta #7 il: 08 Agosto 2011, 14:57:09 CEST »
0
uhm e che problema ti dava il singleton???