Android Cursor.moveToNext ()?

7

Ich versuche, alle Spalten in einer Tabelle in einer langen Textansicht und / oder Zeichenfolge abzufragen. Ich weiß, dass dies nicht der richtige Weg ist, Dinge zu tun, aber ich muss das tun. Korrigiere mich, wenn ich falsch liege, ich hatte den Eindruck, dass move next die nächste Spalte in der Reihe bekommen würde:

%Vor%

Ich dachte, dass dies die erste Spalte bekommen und alle Inhalte anzeigen würde, stattdessen bekomme ich die erste Spalte und die erste Zeile. Was mache ich falsch? Gibt es eine bessere oder echte Möglichkeit, diese Informationen ohne Verwendung eines ListView zu erhalten?

    
Christian 10.04.2012, 00:38
quelle

5 Antworten

9

Aus Gründen der Klarheit wäre ein vollständiges Beispiel wie folgt, von dem ich vertraue, dass es von Interesse ist. Als Code-Kommentare angegeben, durchlaufen wir im Wesentlichen über Datenbankzeilen und dann Spalten, um eine Tabelle von Daten nach Datenbank zu bilden.

%Vor%     
user1720179 04.10.2012, 13:29
quelle
30

Die einfache Verwendung ist:

%Vor%

moveToFirst wird verwendet, wenn Sie mit dem Iterieren beginnen müssen, nachdem Sie bereits eine Position erreicht haben.

Vermeiden Sie die Verwendung von cursor.getCount (), außer es ist erforderlich. Und verwenden Sie niemals eine Schleife über getCount ().

getCount ist teuer - es iteriert über viele Datensätze, um sie zu zählen. Es gibt keine gespeicherte Variable zurück. Möglicherweise wird bei einem zweiten Anruf etwas zwischengespeichert, aber der erste Anruf weiß die Antwort erst, wenn sie gezählt wurde.

Wenn Ihre Abfrage 1000 Zeilen entspricht, hat der Cursor tatsächlich nur die erste Zeile. Jeder moveToNext sucht und findet die nächste Übereinstimmung. getCount muss alle 1000 finden. Warum iterieren Sie alle, wenn Sie nur 10 brauchen? Warum zweimal wiederholen?

Auch wenn Ihre Abfrage keinen Index verwendet, ist getCount möglicherweise sogar langsamer - getCount kann über 10000 Datensätze durchlaufen, obwohl die Abfrage nur 100 entspricht. Warum Schleife 20000 statt 10000?

    
Pla 24.04.2013 07:57
quelle
1

moveToNext bewegt den Cursor zur nächsten Zeile. und c.getString (0) gibt Ihnen immer die erste Spalte, wenn es eine gibt. Ich denke, du solltest etwas ähnliches in deiner Schleife machen

%Vor%     
CChi 10.04.2012 01:17
quelle
1

cursor.moveToFirst() bewegt den Cursor in die erste Zeile. Wenn Sie wissen, dass Sie 6 Spalten haben und eine Zeichenfolge mit allen Spalten haben möchten, versuchen Sie Folgendes:

%Vor%     
Raunak 10.04.2012 01:22
quelle
0

Ich schreibe meine Schleifen so über den Fehler:

%Vor%

Das funktioniert immer. Dies ruft die Werte der Spalte "column_name" aller Zeilen ab. Ihr Fehler besteht darin, dass Sie die Zeilen und nicht die Spalten durchlaufen. Um die Spalten zu durchlaufen:

%Vor%

Damit werden die Spalten der ersten Zeile durchlaufen und die einzelnen Spaltenwerte abgerufen.

    
mrd 10.04.2012 01:52
quelle

Tags und Links