Autore Topic: aiuto per crash applicazione  (Letto 1006 volte)

Offline tiziano0371

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
aiuto per crash applicazione
« il: 06 Maggio 2012, 18:55:12 CEST »
0
Ciao, ho realizzato la mia prima app, andava tutto bene, ho fatto dei cambiamenti e adesso crasha sempre, non capisco che succede. mi aiutate x favore? INFINITE GRAZIE.
questo è il messaggio di eclipse:

05-06 16:42:53.594: I/Database(368): sqlite returned: error code = 1, msg = no such table: DettagliTable
05-06 16:42:53.594: D/AndroidRuntime(368): Shutting down VM
05-06 16:42:53.604: W/dalvikvm(368): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
05-06 16:42:53.615: E/AndroidRuntime(368): FATAL EXCEPTION: main
05-06 16:42:53.615: E/AndroidRuntime(368): java.lang.RuntimeException: Unable to resume activity {it.tizianoniero.fpsagendafull/it.tizianoniero.fpsagendafull.VisualizzaeInserisci}: android.database.sqlite.SQLiteException: no such table: DettagliTable: , while compiling: SELECT giorno, tipo, quantita FROM DettagliTable WHERE anno =? AND mese=?
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.os.Looper.loop(Looper.java:123)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.ActivityThread.main(ActivityThread.java:4627)
05-06 16:42:53.615: E/AndroidRuntime(368):    at java.lang.reflect.Method.invokeNative(Native Method)
05-06 16:42:53.615: E/AndroidRuntime(368):    at java.lang.reflect.Method.invoke(Method.java:521)
05-06 16:42:53.615: E/AndroidRuntime(368):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-06 16:42:53.615: E/AndroidRuntime(368):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-06 16:42:53.615: E/AndroidRuntime(368):    at dalvik.system.NativeStart.main(Native Method)
05-06 16:42:53.615: E/AndroidRuntime(368): Caused by: android.database.sqlite.SQLiteException: no such table: DettagliTable: , while compiling: SELECT giorno, tipo, quantita FROM DettagliTable WHERE anno =? AND mese=?
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
05-06 16:42:53.615: E/AndroidRuntime(368):    at it.tizianoniero.fpsagendafull.VisualizzaeInserisci.onResume(VisualizzaeInserisci.java:803)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.Activity.performResume(Activity.java:3823)
05-06 16:42:53.615: E/AndroidRuntime(368):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
05-06 16:42:53.615: E/AndroidRuntime(368):    ... 12 more

e questa la dichiarazione del database
package it.tizianoniero.fpsagendafull.db;


import java.text.MessageFormat;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseDettagli extends SQLiteOpenHelper {
   private static final String DATABASE_NAME = "FPSDettagli.db";

   private static final int SCHEMA_VERSION = 1;

   public DatabaseDettagli(Context context) {
      super(context, DATABASE_NAME, null, SCHEMA_VERSION);
   }

   @Override
   public void onCreate(SQLiteDatabase dbd) {
      String sql ="CREATE TABLE {0} ({1} INTEGER PRIMARY KEY AUTOINCREMENT, {2} INTEGER, {3} INTEGER," +
            " {4} INTEGER, {5} INTEGER, {6} INTEGER, {7} INTEGER, {8} INTEGER, {9} STRING );";
      dbd.execSQL(MessageFormat.format(sql, DettagliTable.TABLE_NAME, DettagliTable._ID, DettagliTable.ANNO,
            DettagliTable.MESE, DettagliTable.GIORNO, DettagliTable.TIPO, DettagliTable.QUANTITA, DettagliTable.DALLE,
            DettagliTable.ALLE, DettagliTable.NOTE));
      inserisciDettagli(dbd);
   }

   protected void inserisciDettagli(SQLiteDatabase dbd) {
      inserisciDettaglio(dbd, 2011, 1, 1, 1, 1, 1, 1, "ciao");


   }

   private void inserisciDettaglio(SQLiteDatabase dbd, Integer anno, Integer mese,Integer giorno,
         Integer tipo, Integer quantita, Integer dalle, Integer alle, String note) {
      ContentValues v = new ContentValues();
      v.put(DettagliTable.ANNO, anno);
      v.put(DettagliTable.MESE, mese);
      v.put(DettagliTable.GIORNO, giorno);
      v.put(DettagliTable.TIPO, tipo);
      v.put(DettagliTable.QUANTITA, quantita);
      v.put(DettagliTable.DALLE, dalle);
      v.put(DettagliTable.ALLE, alle);
      v.put(DettagliTable.NOTE, note);
      
      
      dbd.insert(DettagliTable.TABLE_NAME, null, v);
   }

   public Cursor getDettagli() {
      return (getWritableDatabase().query(
            DettagliTable.TABLE_NAME,
            DettagliTable.COLUMNS,
            "length (" + DettagliTable.ANNO    + ") > 0",
            null,
            null,
            null,
            DettagliTable.ANNO));
   }

   public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
   }
}

Offline tiziano0371

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
Re:aiuto per crash applicazione
« Risposta #1 il: 06 Maggio 2012, 19:00:36 CEST »
0
questa è la dischiarazione della Table


package it.tizianoniero.fpsagendafull.db;

import android.provider.BaseColumns;

public interface DettagliTable extends BaseColumns
{
   String TABLE_NAME         = "DettagliTable";
   String ANNO               = "anno";
   String MESE             = "mese";
   String GIORNO          = "giorno";
   String TIPO          = "tipo";
   String QUANTITA    = "quantita";
   String DALLE       = "dalle";
   String ALLE       = "alle";
   String NOTE       = "note";

      
   
   String[] COLUMNS = new String[]
   { _ID, ANNO, MESE, GIORNO, TIPO, QUANTITA, DALLE, ALLE, NOTE};
}



E QUI DOVE CRASHA:


         SQLiteDatabase db = databaseDettagli.getReadableDatabase();
            String[] columns ={"giorno", "tipo", "quantita"};
         String selection = "anno =? AND mese=?";
         String anno=Integer.toString(vanno);
         String mese=Integer.toString(vmese);
         String[] selectionArgs = {anno, mese};
            Cursor cursor = db.query("DettagliTable", columns, selection, selectionArgs, null, null, null);

GRAZIE X L'AIUTO

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:aiuto per crash applicazione
« Risposta #2 il: 06 Maggio 2012, 23:51:46 CEST »
0
SQLiteException: no such table: DettagliTable....dice di non trovare la tabella DettagliTable.
Comunque io la classe per il db l'ho sempre fatta così:

Codice (Java): [Seleziona]
private static final String TABLE = "CREATE TABLE....."

public class DatabaseManager extends SQLiteOpenHelper {
...
}

e all'interno un override del  metodo onCreate():

Codice (Java): [Seleziona]
@Override
public void onCreate(SQLiteDatabase database) {
        database.execSQL(TABLE);
}

Offline tiziano0371

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
Re:aiuto per crash applicazione
« Risposta #3 il: 07 Maggio 2012, 07:48:48 CEST »
0
Scusate ma non ci capisco più nulla: ho reinstallato sul telefono una vecchia versione del programma (di 2 settimane fa) che funzionava benissimo e ora anche quella va in crash. sembra come se a forza di installa e disinstalla il telefono ora la rifiuti: faceva così schifo??????

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:aiuto per crash applicazione
« Risposta #4 il: 07 Maggio 2012, 08:11:06 CEST »
0
Come ha detto emaborsa, l'errore è che non trova la tabella, quindi la prima cosa da fare (a mio avviso) è verificare che esista, per altra via.

Commenta la riga della query (che poi è quella che genera l'errore) e verifica che l'app si installi e giri.
A questo punto, con il DDMS fai un pull del database dal device al tuo desktop.
Poi apri il database sul desktop con un sqlitemanager (io uso il plugin di firefox) e vedi che tabelle ci sono e come si chiamano.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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:aiuto per crash applicazione
« Risposta #5 il: 07 Maggio 2012, 09:14:49 CEST »
0
Hai detto che hai fatto modifiche e a quel punto non funziona più nulla... non ho però capito se la tabella che non ti trova è per caso un'aggiunta rispetto alla versione precedente.
In tal caso mi sarei aspettato di vedere un incremento nella versione dello schema:

Codice (Java): [Seleziona]
private static final int SCHEMA_VERSION = 2;
e una consegente gestione nel metodo onUpgrade.

My 2 cents

Offline tiziano0371

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
Re:aiuto per crash applicazione
« Risposta #6 il: 07 Maggio 2012, 12:48:07 CEST »
0
X BRADIPAO : puoi spiegarmi nel dettaglio come fare con il DDMS? ( non so manco cosa sia, sob!).
Grazie



Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:aiuto per crash applicazione
« Risposta #7 il: 07 Maggio 2012, 14:14:15 CEST »
0
X BRADIPAO : puoi spiegarmi nel dettaglio come fare con il DDMS? ( non so manco cosa sia, sob!).

DDMS = Dalvik Debug Monitor Server

Trovi una spiegazione dettagliata qua: Using DDMS | Android Developers

Per fare il pull del database della tua app, vedi qua: How to view the SQLite database on your Android Emulator | Web and Android Development Tips
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline tiziano0371

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
Re:aiuto per crash applicazione
« Risposta #8 il: 07 Maggio 2012, 19:39:53 CEST »
0
Allora: NON SO CHE DIRE! Intanto GRAZIE per i consigli: ho verificato che non si creava realmente la tabella ma non so perchè. Poichè del programma ho 2 versioni (una di prova e l'altra a pagamento) ho fatto copia-incolla delle dichiarazioni dei db da quella funzionante (quella di prova, operazione che avevo già tentato inutilmente) e ad un certo punto è partito tutto. provo allora sul device e funziona; disinstallo e reinstallo : non va più!!! vado allora nella gestione delle applicazioni e faccio "Cancella dati". riprovo e funziona.....insomma non c'ho capito molto. Quello che mi preoccupava era che mi sono auto-comprato l'app nello store appunto per fare questo tipo di verifiche e dall'ultimo aggiornamento di 3 giorni fa era quella che crashava. Contemporaneamente, però, in questi giorni c'è gente che l'ha comprata e nessuno si è lamentato. Provo oggi a riscaricarla dallo store e...sorpresa:funziona!!! (dopo 2 giorni di vari ma inutili scaricamenti). Che dire? BOH! Volevo mettervi a conoscenza del mio travaglio. Problema risolto? anche qui: BOH! Aspetto per scaramanzia qualche giorno prima di segnare come RISOLTO.
 ciao e grazie ancora Tiziano Niero

Offline MariFio

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google ideos
  • Sistema operativo:
    Mac OS X 10.5
Re:aiuto per crash applicazione
« Risposta #9 il: 07 Maggio 2012, 20:32:23 CEST »
0
Ciao ecco il consiglio, se pur banale è probabile fonte di errore.
All'atto delle modifiche alla tabella, hai disinstallato l'app e re-installato la stessa?
Se così non fosse il problema te lo ritroverai sempre (ciò avviene come ti dicevano in precedenza se non gestisci il metodo onUpgrade del tuo database).

Quindi prova a disinstallare l'app e rilanciarla.
Il database viene ricreato e di conseguenza anche la tabella che hai inserito aggiunto e/o modificato.
Ti dico questo perchè anche io ho commesso molte volte lo stesso errore :-D

Saluti e b. fortuna
MF

Offline tiziano0371

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
Re:aiuto per crash applicazione
« Risposta #10 il: 08 Maggio 2012, 12:04:37 CEST »
0
il punto è che ho fatto modifiche all'app ma non alle tabelle per cui mi rimangono dei dubbi (potrei averla, magari, aperta in eclipse e inavvertitamente schiacciato uno spazio sulla tastiera ma non so se questa sia interpretata come modifica alla tabella). grazie x la risposta ciao

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:aiuto per crash applicazione
« Risposta #11 il: 08 Maggio 2012, 12:11:09 CEST »
0
...se hai ancora problemi disinstalla l'app a mano via linea di comando usando:

adb uninstall <nomwPackageDellaMainActivity>

Poi quando avvi l'app da Eclipse su cell, dovrebbe funzionare. Se ancora non funziona vuol dire che c'è un problema nel codice, che non ti crea la tabella.