Autore Topic: cursor invalid statement in fillwindow()  (Letto 1392 volte)

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
cursor invalid statement in fillwindow()
« il: 10 Giugno 2011, 17:53:50 CEST »
0
Ciao a tutti.

Un semplice codice come questo mi genera l'errore riportato un oggetto, perche'?

Codice (Java): [Seleziona]
/** Called when the activity is first created. */
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
               
                setContentView(R.layout.region_list);
               
                mDbHelper = new GeoDbAdapter(this);
                mDbHelper.open();
               
                viewRegionList();
               
                mDbHelper.close();
               

        }

[code=java]
public void viewRegionList(){
               
                regionCursor = mDbHelper.getRegion();
                startManagingCursor(regionCursor);
               
       
               
        // Create an array to specify the fields we want to display in the list (only TITLE)
        String[] from = new String[]{GeoDbAdapter.KEY_REG};

        // and an array of the fields we want to bind those fields to (in this case just text1)
        int[] to = new int[]{R.id.text1};

        // Now create a simple cursor adapter and set it to display
        SimpleCursorAdapter regionList = new SimpleCursorAdapter(this, R.layout.rowlayout, regionCursor, from, to);
       
        setListAdapter(regionList);
       
        }

cursor e' dichiarato come private Cursor regionCursor;

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

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:cursor invalid statement in fillwindow()
« Risposta #2 il: 11 Giugno 2011, 09:46:22 CEST »
0
Se ti dico che l'unica riga rossa del logCat è quella in soggetto ci credi? Nemmeno una arancione...cmq appena mi trovo davanti ad un pc posto.

r

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:cursor invalid statement in fillwindow()
« Risposta #3 il: 24 Giugno 2011, 18:29:17 CEST »
0
Ho cambiato tutta la procedura ed evitato l'uso dei cursori.

Offline mpigio

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Windows XP
Re:cursor invalid statement in fillwindow()
« Risposta #4 il: 27 Novembre 2012, 13:17:45 CET »
0
Ciao a tutti, ho lo stesso problema, Vi posto il codice e il LogCat, spero possiate essermi d'aiuto.

Codice: [Seleziona]
public void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                databaseHelper = new DatabaseHelper(RoutesActivity.this); // Check database version
                 db = databaseHelper.getReadableDatabase();
                 RoutesHelper.res = getResources();

                 try {
                        c = RoutesHelper.getRoutes(db);
                        if (c.getCount()>0) {
                                try
                                {
                                        while (c.moveToNext())
                                        {
                                                Log.d("mpigio", c.getLong(0) + " cod:" + c.getString(1) + " nome:" + c.getString(2)); // + " user:" + c.getString(3));
                                        }
                                }
                                finally 
                                {
                                        c.close(); // Close database cursor
                                }
                        } else {
                                Log.d("mpigio", "RoutesActivity - Non ci sono route");
                        }
                } catch (Exception e) {
                        Log.d("mpigio",e.toString());
                }
                
        }

LogCat
.....
11-27 12:16:18.176: D/mpigio(1205): ImagesHelper - createImagesTable
11-27 12:16:18.326: E/mpigio(1205): RoutesHelper - getRoutes
11-27 12:16:18.409: D/mpigio(1205): RoutesActivity - Mostro percorsi presenti
11-27 12:16:18.435: E/Cursor(1205): Invalid statement in fillWindow()
11-27 12:16:18.485: D/mpigio(1205): RoutesActivity - count: 0
11-27 12:16:18.485: D/mpigio(1205): RoutesActivity - Non ci sono route

Come posso rintracciare l'errore?
Grazie

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:cursor invalid statement in fillwindow()
« Risposta #5 il: 27 Novembre 2012, 17:24:54 CET »
0
Mettendo nel catch

Codice (Java): [Seleziona]
} catch (Exception e) {
  Log.e("mpigio", e.toString(), e);
}

potrebbe essere d'aiuto.
Se metti solo Log.d ti perdi tutto lo stacktrace, che ti dice la sequenza esatta di tutti i metodi chiamati prima di arrivare all'errore con tanto di riga.

Offline mpigio

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Windows XP
Re:cursor invalid statement in fillwindow()
« Risposta #6 il: 28 Novembre 2012, 13:41:17 CET »
0
Grazie Sakazaki, purtroppo non ho niente in più sul logcat mettendo la Log.e!

Però ho scoperto che probabilmente il problema è dovuto al fatto che non riesco a prelevare i record dalla tabella anche se in realtà so che la tabella è popolata.

In effetti questo controllo:
if (c.getCount()>0) {
non viene superato e per far sparire l'errore in oggetto devo togliere la chiamata all'helper che restituisce i record della tabella.

La query è semplice e corretta:
Codice: [Seleziona]
public static Cursor getRoutes(SQLiteDatabase db)
        {
                Log.d("mpigio", "RoutesHelper - getRoutes");
                try
                {
                        String query = "SELECT * FROM routes";
                        return db.rawQuery(query, null);
                                            // OPPURE:
                         //return db.query(RoutesTable.TABLE_NAME, RoutesTable.COLUMNS, "", null, null, null, RoutesTable.NAME);
                }
                catch (Exception e)
                {
                        Log.e("mpigio", "ERROR IN CODE: " + e.toString());
                        e.printStackTrace();
                }
                finally
                {
                        db.close();
                } 
               
                return null;
        }

So che è popolata perchè ad ogni insert mi restituisce un ID nuovo incrementato
Come posso ricercare l'errore?

Grazie ancora

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:cursor invalid statement in fillwindow()
« Risposta #7 il: 28 Novembre 2012, 13:44:53 CET »
0
A mali estremi, estremi rimedi.

e.printStackTrace()

e se non logga l'errore in console questo non lo logga nessuno!

Offline mpigio

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Windows XP
Re:cursor invalid statement in fillwindow()
« Risposta #8 il: 01 Dicembre 2012, 12:11:50 CET »
0
Aja! Sono finito nell'ultima ipotesi. Ho messo e.printStackTrace(); sia sull'activity che sull'helper del db e non ho nessun messaggio d'errore, ma come dicevo la query è corretta eppure non torna nulla!

Mi sono finito le armi per poter analizzare il problema.
Potrei andare a cercare da qualche parte il database e accertarmi che ci siano record (anche se ne sono certo) ma poi? Se anche trovo i record come mai su questa tabella non riesco a recuperare niente invece in altre si?

Spero che possiate essermi d'aiuto!
Grazie cmq
« Ultima modifica: 01 Dicembre 2012, 12:17:39 CET da mpigio »