Android cursor.moveToNext ()?

Ich versuche, alle Spalten in einer Tabelle in eine lange Textansicht und / oder String abzufragen. Ich weiß, das könnte nicht der richtige Weg sein, Dinge zu tun, aber ich muss das tun. Korrigieren Sie mich, wenn ich mich irre, war ich unter dem Eindruck, dass der nächste als nächstes die nächste Spalte in der Reihe bekommen würde:

Cursor c = db.get(); if(c.moveToFirst){ do{ string = c.getString(0); }while(c.moveToNext); 

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

  • SQlite-Abfrage nach Fall
  • Android SQL Lite nicht wachsen
  • Wie implementieren One-to-Many-Objekt-Datenbank in sqlite für Android
  • Android - sqlite in Klausel mit Werten aus Array
  • Best Practices für die Synchronisation einer SQL-Datenbank mit einem REST Remote Server auf Android
  • Wie benutzt man das LIMIT-Argument in einer SQLite-Abfrage mit Android
  • SQLite Query in nicht case sensitive alphabetische Reihenfolge
  • Wie zu schreiben enthält Abfrage in SQLite fts3 Volltextsuche
  • 5 Solutions collect form web for “Android cursor.moveToNext ()?”

    Für Klarheit wäre ein komplettes Beispiel wie folgt, von dem ich vertraue, ist von Interesse. Als Code-Kommentare angegeben wir im Wesentlichen über Datenbank-Zeilen und dann Spalten zu einer Tabelle von Daten wie pro Datenbank zu bilden.

      Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, null); //if the cursor isnt null we will essentially iterate over rows and then columns //to form a table of data as per database. if (cursor != null) { //more to the first row cursor.moveToFirst(); //iterate over rows for (int i = 0; i < cursor.getCount(); i++) { //iterate over the columns for(int j = 0; j < cursor.getColumnNames().length; j++){ //append the column value to the string builder and delimit by a pipe symbol stringBuilder.append(cursor.getString(j) + "|"); } //add a new line carriage return stringBuilder.append("\n"); //move to the next row cursor.moveToNext(); } //close the cursor cursor.close(); } 

    Der einfache Gebrauch ist:

     Cursor cursor = db.query(...); while (cursor.moveToNext()) { ... } 

    MoveToFirst wird verwendet, wenn du von Anfang an beginnen musst, nachdem du eine Position erreicht hast.

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

    GetCount ist teuer – es iteriert über viele Aufzeichnungen, um sie zu zählen. Es gibt keine gespeicherte Variable zurück. Es kann ein paar Zwischenspeicher bei einem zweiten Anruf geben, aber der erste Anruf kennt die Antwort erst, wenn er gezählt wird.

    Wenn Ihre Abfrage mit 1000 Zeilen übereinstimmt, hat der Cursor tatsächlich nur die erste Zeile. Jeder moveToNext sucht und findet das nächste Spiel. GetCount muss alle 1000 finden. Warum Iteration über alle, wenn Sie nur 10 brauchen? Warum zweimal ertragen?

    Auch wenn Ihre Abfrage keinen Index verwendet, kann getCount sogar langsamer sein – getCount kann über 10000 Datensätze gehen, obwohl die Abfrage nur 100 übereinstimmt. Warum Schleife 20000 statt 10000?

    MoveToNext den Cursor in die nächste Zeile bewegen. Und c.getString (0) gibt dir immer die erste Spalte, wenn es eine gibt. Ich denke, du solltest etwas Ähnliches tun in deiner Schleife

     int index = c.getColumnIndex("Column_Name"); string = c.getString(index); 

    cursor.moveToFirst() verschiebt den Cursor zur ersten Zeile. Wenn Sie wissen, dass Sie 6 Spalten haben und Sie einen String mit allen Spalten wünschen, versuchen Sie Folgendes.

     c.moveToFirst(); StringBuilder stringBuilder = new StringBuilder(); for(int i = 0; i < 6; i++){ stringBuilder.append(c.getString(i)); } // to return the string, you would do stringBuilder.toString(); 

    Ich kodiere meine Schleifen über den Cusror wie folgt:

      cursor.moveToFirst(); while(!cursor.isAfterLast()) { cursor.getString(cursor.getColumnIndex("column_name")); cursor.moveToNext(); } 

    Das funktioniert immer Dadurch werden die Werte der Spalte "Spaltenname" aller Zeilen abgerufen. Dein Fehler ist, dass du über die Zeilen schleppst und nicht die Spalten. Um die Spalten zu überschreiten:

     cursor.moveToFirst(); for(int i = 0; i < cursor.getColumnNames().length; i++){ cursor.getString(i); } 

    Das wird über die Spalten der ersten Zeile gehen und jeden Spaltenwert abrufen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.