2013-08-10 5 views
5

Cursor gibt immer null zurück, auch wenn die Datenbank nicht leer ist. Warum? und wie löst man das? Vielen Dank.Android: Cursor gibt immer null zurück, auch wenn die Datenbank nicht leer ist

public StatParcours getOneUserInfo(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.query(TABLE_USER, new String[] { KEY_USER_ID, 
      KEY_STUDN , KEY_STUDBD, KEY_TEACHN, KEY_TEACHBD}, KEY_USER_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 

    StatParcours stat = null; 
    if ((cursor!= null)&&(cursor.moveToFirst())){  
     stat = new StatParcours(
      Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), 
      cursor.getString(2), 
      cursor.getString(3), 
      cursor.getString(4)); 
    } 
    return stat ; 
}  
+0

Sind Sie sicher, dass der Cursor null ist? Vielleicht hat es einfach keine Reihen? Haben Sie überprüft, dass die Abfrage, die Sie erstellen, mindestens 1 Ergebnis zurückgibt? – Karakuri

+0

Ja, ich habe den Datenbankinhalt mit Log geprüft, als den angezeigten Wert von Stat, wenn ich diese Methode anrufe, die immer Null ist. So verstanden, dass Cursor immer Null ist. – user2613911

+0

Wenn Sie 'Log.d (" Foo "," Cursor ist: "+ Cursor);' Drucken '' Cursor ist: null'? Wenn "null" nicht gedruckt wird, ist der Cursor leer. Leer bedeutet, dass Ihre Abfrage 0 Elemente gefunden hat, die den Kriterien entsprechen, und Sie müssen möglicherweise überprüfen, ob Ihre Abfrage falsch ist. – zapl

Antwort

0

sollten Sie enture der Cursor null ist oder nicht, und wenn nicht, müssen Sie die cursor.getCount bestätigen() nicht Null ist, sind Sie sicher?

if (cursor!= null && cursor.getCount() > 0 && cursor.moveToFirst()){ 
    //do something 
} 

wenn Cursor null oder cursor.getCount ist() ist Null, aber Datenbank vorhanden sind und Daten korrekt sind, sollten Sie Ihren SQL erkennen und Befehl im Terminal oder SQL-Client ausgeführt werden, dieses Problem zu beheben.

+0

Dieses didn ‚t Arbeit. Wie ths Problem zu beheben, um das Terminal? – user2613911

+0

Überprüfung auf' null' nicht notwendig ist, und die 'getCount' und' moveToFirst' Kontrollen redundant sind. –

+0

Leute sagen immer, dass die Überprüfung auf den Cursor == null ist nicht notwendig, der Grund ist, dass der Fall, in dem Cursor * ist * null, 'query' hat eine Ausnahme ausgelöst, so dass Sie nicht zur Prüfung kommen. –

2

Sie vergleichen die Benutzer-ID mit einem Zeichenfolgenwert, der niemals erfolgreich sein wird, wenn Ihre Benutzer-IDs Zahlen sind.

In Android, Sie Abfrageparameter für Stringwerte verwenden sollten; Sie sollten ganze Zahlen direkt in die Query-String einbetten:

cursor = db.query(..., ..., KEY_USER_ID + "=" + id, null, ...); 
0

Der Wert CursorFactory, wenn die Datenbank erstellen sollte null sein, wenn Sie nicht spezifische Anforderung verfügen.

So habe ich dieses Problem gelöst.

Verwandte Themen