Autore Topic: Recupero date da DB  (Letto 1443 volte)

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Recupero date da DB
« il: 25 Maggio 2011, 20:50:11 CEST »
0
Ho un problema riguardante il recupero delle date dal database:
Lo store viene effettuato ricavando il timestamp dall oggetto Date e salvandolo nel DB.
Per recuperarlo faccio in questo modo:
Codice (Java): [Seleziona]
db = new AppDB(getApplicationContext());
                db.open();

                String[] columnEve = new String[] { AppDB.eveName, AppDB.evePhoto,
                                AppDB.eveLatitude, AppDB.eveLongitude, AppDB.eveDate};
                c = db.getEveInfo(columnEve, id);
                c.moveToFirst();
               
                Date date = new Date (c.getLong(c.getColumnIndex(AppDB.eveName)));
                int day = date.getDate();
                int month = date.getMonth();
                int year = date.getYear();
               
                tv_date.setText(day+month+year);   //RIGA  51 CHE MI DA ERRORE
   
Il logcato mi da questo errore:
Codice: [Seleziona]
E/AndroidRuntime(  529): FATAL EXCEPTION: main
E/AndroidRuntime(  529): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.unipd.dei.es1011.droidgrill/it.unipd.dei.es1011.droidgrill.InfoEvent}: android.content.res.Resources$NotFoundException: String resource ID #0x47
E/AndroidRuntime(  529):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(  529):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(  529):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(  529):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(  529):         at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  529):         at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  529):         at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(  529):         at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  529):         at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  529):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(  529):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(  529):         at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  529): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x47
E/AndroidRuntime(  529):         at android.content.res.Resources.getText(Resources.java:201)
E/AndroidRuntime(  529):         at android.widget.TextView.setText(TextView.java:2817)
E/AndroidRuntime(  529):         at it.unipd.dei.es1011.droidgrill.InfoEvent.onCreate(InfoEvent.java:51)
E/AndroidRuntime(  529):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(  529):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime(  529):         ... 11 more

Il fatto è che il resto degli attributi vengono recuperati correttamente (nome, lat, lon, foto) l'unico problema mi viene dato con la data...

Questo è il metodo con cui inserisco un evento con la sua data:
Codice (Java): [Seleziona]
// METODO che inserisce un evento
        public void insertEvent(String name, int lat, int lon, long date) {
                ContentValues cv = new ContentValues();
                cv.put(eveName, name);
                cv.put(eveLatitude, lat);
                cv.put(eveLongitude, lon);
                cv.put(eveDate, date);
                mDb.insert(eveTable, null, cv);
        }
mentre questo è il codice che recupera le info dell'evento:
Codice (Java): [Seleziona]
public Cursor getEveInfo(String[] columns, int id) {
                return mDb.query(eveTable, columns, eveID + "=" + id, null, null, null,
                                null, null);

        }

Questa è la tabella del mio DB:
Codice (Java): [Seleziona]
// create EVENTStable
        private static final String EVENTS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "
                        + eveTable
                        + " ("
                        + eveID
                        + " INTEGER PRIMARY KEY AUTOINCREMENT , "
                        + eveName
                        + " TEXT , "
                        + eveLatitude
                        + " INTEGER , "
                        + eveLongitude
                        + " INTEGER , "
                        + eveDate
                        + " REAL , "
                        + evePhoto
                        + " NONE)";
Forse sbaglio a salvare come REAL il timestamp?
Spero di non aver tralaciato nulla... Ciao e grazie!  ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recupero date da DB
« Risposta #1 il: 25 Maggio 2011, 21:04:52 CEST »
0
Se day, month e year sono interi se li sommi cosa succede?
Il metodo setText che tipo di parametri accetta?

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:Recupero date da DB
« Risposta #2 il: 25 Maggio 2011, 21:07:11 CEST »
0
Se day, month e year sono interi se li sommi cosa succede?
Il metodo setText che tipo di parametri accetta?
il fatto è che mi da lo stesso errore anche se faccio
Codice (Java): [Seleziona]
                tv_date.setText(day);

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recupero date da DB
« Risposta #3 il: 25 Maggio 2011, 21:07:49 CEST »
0
Il metodo setText che tipo di parametri accetta?

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:Recupero date da DB
« Risposta #4 il: 25 Maggio 2011, 21:13:30 CEST »
0


setText accetta un int, che è quello che gli passo! :-\

Cmq per il resto dite che è a posto il sistema che ho usato per inserire e rimuovere dal database il timestam e poi per recuperarlo creando un Date e ripescando giorno mese e anno?
Perchè a me metteva paura questa riga del logcat:
Codice: [Seleziona]
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x47

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recupero date da DB
« Risposta #5 il: 25 Maggio 2011, 21:15:35 CEST »
0
setText accetta un int, che è quello che gli passo! :-\

Ah quindi se tu fai setText("Ciao!") "Ciao!" è un intero.

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:Recupero date da DB
« Risposta #6 il: 25 Maggio 2011, 21:18:53 CEST »
0
Ah quindi se tu fai setText("Ciao!") "ciao" è un intero.
Ma se passo un intero e vuole una stringa deve stamparmelo lo stesso!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Recupero date da DB
« Risposta #7 il: 25 Maggio 2011, 21:21:47 CEST »
0
Ma se passo un intero e vuole una stringa deve stamparmelo lo stesso!


Dove sta scritto?
Vai sulla documentazione e vedi cosa fa il metodo quando gli passi un intero.

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:Recupero date da DB
« Risposta #8 il: 25 Maggio 2011, 21:30:02 CEST »
0
Dove sta scritto?
Vai sulla documentazione e vedi cosa fa il metodo quando gli passi un intero.

Se gli passo un int in effetti hai ragione mi lancia un altro metodo (che accetta un parametro diverso ma che evidentemente non fa quello che voglio)
Allora ho dato:
tv_date.setText(day+" "+month+1 +" "+year);

La cosa bella è che mi stampa 1 01 70 (lo fa per tutti gli eventi salvati, che io abbia impostato una data o meno) che mi puzza molto sia per 1 gennaio 1970 che a sua volta credo sia come un valore di default che mi ritrovo in mano avendo sbagliato qualcosa tra i vari passaggi...



Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:Recupero date da DB
« Risposta #9 il: 26 Maggio 2011, 19:48:34 CEST »
0
Risolto:
Avevo dato
Codice (Java): [Seleziona]
                Date date = new Date (c.getLong(c.getColumnIndex(AppDB.eveName)));invece di
Codice (Java): [Seleziona]
                Date date = new Date (c.getLong(c.getColumnIndex(AppDB.eveDate)));