Autore Topic: Problema con l'inserimento di una riga SQlite in un array  (Letto 741 volte)

Offline android

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung mini2
  • Sistema operativo:
    Windows 7
Problema con l'inserimento di una riga SQlite in un array
« il: 05 Settembre 2013, 10:32:07 CEST »
0
Buongiorno! Ho il seguente problema:
mi trovo a dover memorizzare dei dati prelevati da un database SQLite e inserirli all'interno di un array che contiene dei marcatori per un applicazione di localizzazione gps.
Per quanto riguarda la creazione della classe Database e il popolamento dello stesso non c'è nessun problema, ma quando mi trovo a leggere attraverso la funzione
Codice (Java): [Seleziona]
SQLiteDatabase db = mioDatabaseHelper.getReadableDatabase();
Cursor c = mioDatabaseHelper.getDati();
while (c.moveToNext())
riscontro i seguenti problemi:
l'array in cui memorizzare i dati e' di tipo Marker (classe che ho implementato) che si chiama cachedMarkers
Codice (Java): [Seleziona]
private List<Marker> cachedMarkers = new ArrayList<Marker>();e si aspetta i seguenti parametri

Codice (Java): [Seleziona]
public Marker(String name, double latitude, double longitude, double altitude, int color) {
        set(name, latitude, longitude, altitude, color);
I parametri all'interno del database sono identici tuttavia non riesco a memorizzarli nell'array.
Ho provato con un cast, ma nulla
Esiste una funzione che possa fare un parsing di cio'

Alla chiamata del metodo add su cachedMarkers mi dice che l'array si aspetta un oggetto di tipo Marker
 
Grazie in anticipo a chi riuscirà ad aiutarmi
« Ultima modifica: 05 Settembre 2013, 11:26:36 CEST da Ricky`, Reason: tasto code »

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #1 il: 05 Settembre 2013, 12:33:49 CEST »
0
Prova con
Codice (Java): [Seleziona]
private List<Marker> cachedMarkers = new ArrayList<Marker>();
SQLiteDatabase db = mioDatabaseHelper.getReadableDatabase();
Cursor c = mioDatabaseHelper.getDati();
if (c.moveToFirst()) {
    do {
        cachedMarkers.add(new Marker( c.getString(c.getColumnIndex("name")), c.getDouble(c.getColumnIndex("latitude")), c.getDouble(c.getColumnIndex("longitude")), c.getDouble(c.getColumnIndex("altitude")), c.getInt(c.getColumnIndex("color")));
    } while (c.moveToNext());
}

Supponendo che le colonne nel database abbiano i nomi "name", "latitude", ecc
« Ultima modifica: 05 Settembre 2013, 14:36:52 CEST da vincenzoc »
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline android

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung mini2
  • Sistema operativo:
    Windows 7
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #2 il: 05 Settembre 2013, 13:17:02 CEST »
0
Grazie mille per la risposta, c'è qualche problema col metodo, nel senso che sintatticamente è corretto e per questo ti ringrazio molto visto che stavo impazzendo, tuttavia l'applicazione si arresta immediatamente per errore (la sto provando direttamente sullo smartphone)
Penso che potrebbe essere un problema con le colonne della tabella.
Avrei due quesiti per favore,
1. il metodo ha come parametro un int per il colore ma quando lo aggiungo manualmente non metto un numero (forse fa un cast automatico?) Sotto ho messo la stringa di codice che uso per impostare manualmente le coordinate

Marker Stadio = new Marker("Stadio", 43.106111, 12.357222, 0, Color.WHITE);
        cachedMarkers.add(Stadio);
2. C'e' un metodo che invece di leggere da colonna per nome lo fa per indice, ti ricordi qual e'
Grazie ancora

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #3 il: 05 Settembre 2013, 13:37:48 CEST »
+1
Per quando riguarda la seconda richiesta semplicemente modifica l'aggiunta nell'ArrayList in questo modo (supponendo che il nome sia in prima posizione, la latitudine in seconda, ecc):
Codice (Java): [Seleziona]
cachedMarkers.add(new Marker(c.getString(0), c.getDouble(1), c.getDouble(2), c.getDouble(3), c.getInt(4));
Riguardo il primo problema, invece, dipende da come è salvato il valore "color" nel database. Nel database salvi un Intero per identificare il colore o altro? Se non salvi un interno è probabile che sia questa la causa del crash.
È buona norma comunque postare il Logcat con l'errore, così da poterlo identificare e risolvere :)
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline android

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung mini2
  • Sistema operativo:
    Windows 7
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #4 il: 05 Settembre 2013, 13:48:33 CEST »
0
Per quanto riguarda il logcat non so come farlo perche' da eclipse con l'emulatore l'app non va quindi sono costretto a installare ogni volta sullo smartphone. Se conosci un modo puoi aiutarmi, penso che sarebbe di grande aiuto avere il logcat.
Grazie
Ho provato a usare le funzioni log.d e le altre ma non so dove prendere il risultato forse sul cellulare salva qualcosa?

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #5 il: 05 Settembre 2013, 13:59:14 CEST »
0
Con "installare ogni volta sullo smartphone" intendi che carichi ogni volta manualmente l'apk sul dispositivo oppure con la funzione "Run" di Eclipse? L'opzione corretta è, naturalmente, la seconda. Per avviare l'applicazione sul tuo dispositivo direttamente da Eclipse puoi fare riferimento a questa pagina (la parte To run the app from Eclipse). A questo punto sarà possibile visualizzare il logcat direttamente su Eclipse.
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline android

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung mini2
  • Sistema operativo:
    Windows 7
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #6 il: 05 Settembre 2013, 14:33:00 CEST »
0
Eccolo qua! Devo dire che mi stai aiutando tantissimo, ti ringrazio veramente tanto
Ho fatto quello che diceva la guida, adesso ho il logcat.
L'ho messo in allegato

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #7 il: 05 Settembre 2013, 14:39:22 CEST »
0
Puoi postare la porzione di codice che genera l'eccezione? Quando sei sul Logcat fai doppio click su
Codice: [Seleziona]
at com.jwetherell.augmented_reality.data.LocalDataSource.getMarkers(LocalDataSource.java:75)e
Codice: [Seleziona]
at com.jwetherell.augmented_reality.activity.Demo.onCreate(Demo.java:75)
e copia le porzioni di codice
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline android

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung mini2
  • Sistema operativo:
    Windows 7
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #8 il: 05 Settembre 2013, 15:14:12 CEST »
0
Non voglio approfittare ma ti invio tutta la classe che genera l'errore in allegato per quanto riguarda questo errore
at com.jwetherell.augmented_reality.data.LocalDataSource.getMarkers(LocalDataSource.java:75)

Per il secondo caso
la linea di codice che genera errore e' la seconda
 LocalDataSource localData = new LocalDataSource(this.getResources());
        ARData.addMarkers(localData.getMarkers());

A questo punto penso che il problema sia con il database sqlite

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #9 il: 05 Settembre 2013, 15:20:43 CEST »
0
L'errore sta in
Codice (Java): [Seleziona]
mioDatabaseHelper.getReadableDatabase()
In quanto hai dichiarato mioDatbaseHelper ma è ancora null. Devi quindi crearlo, prima di utilizzarlo:

Codice (Java): [Seleziona]
mioDatabaseHelper=new mioDatabaseHelper(...);
SQLiteDatabase db = mioDatabaseHelper.getReadableDatabase();
« Ultima modifica: 05 Settembre 2013, 15:22:43 CEST da vincenzoc »
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline android

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung mini2
  • Sistema operativo:
    Windows 7
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #10 il: 05 Settembre 2013, 15:49:27 CEST »
0
Si penso che l'errore sia li, ma non so cosa scrivere in mezzo alle parentesi visto che this.getResources non va bene
Quando provo a inserire mioDatabaseHelper=new DatabaseHelper(this);
Eclipse mi dice the constructor DatabaseHelper(LocalDataSource) is undefined


Sto perdendo la forza, e' da 4 giorni che smanetto per trovare l'errore
Penso che lascero' stare, anche perche' manualmente riesco a inserire i markers, volevo includere un database per semplificare il tutto dato che devo inserire parecchie coordinate

Ti allego anche la classe databasehelper, magari riesci a trovare l'errore.
Comunque se passi da perugia sarei molto felice di offrirti un aperitivo
« Ultima modifica: 05 Settembre 2013, 15:58:02 CEST da android »

Offline vincenzoc

  • Utente junior
  • **
  • Post: 148
  • Respect: +47
    • Google+
    • cerminarav
    • Mostra profilo
    • Mie applicazioni sul Play Store
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Vincenzo Cerminara
  • Sistema operativo:
    Arch Linux
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #11 il: 05 Settembre 2013, 21:45:53 CEST »
0
Il costruttore di DatabaseHelper accetta un Context.
Puoi crearti un Context statico nell'Activity con cui gestisci il tutto e prelevarla quando ti serve (anche se non è l'approccio migliore).
Nell'activity:
Codice (Java): [Seleziona]
public class miaActivity extends Activity{
   private static Context cnt;
   //...
   @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           cnt=this;
           //...
   }
   //...
   public static Context getContext(){
      return cnt;
   }
}

Quando vai a creare il DatabaseHelper:
Codice (Java): [Seleziona]
mioDatabaseHelper=new DatabaseHelper(miaActivity.getContext());
Ringrazia chi ti aiuta sul forum con l'apposito pulsante :P
Scarica Yazzy

Offline android

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung mini2
  • Sistema operativo:
    Windows 7
Re:Problema con l'inserimento di una riga SQlite in un array
« Risposta #12 il: 07 Settembre 2013, 19:56:15 CEST »
0
Ho risolto scrivendo una nuova classe da zero includendo anche i metodi, mentre nell' activity principale ho messo solo il ciclo while che usa il cursore. Grazie