Warum geht mein Android-Cursor nicht bis zum Ende des ursprünglichen "Versprechens"?
Meine cursor.getCount() unterscheidet sich von meinem letzten cursor.getPosition() . Prüfen Sie meine while-Schleife! Das ist alles, was ich damit mache!
Anmerkungen : 1. Es geht um die Abfrage des Inhaltsanbieters der Kontakte (Android api >5) 2. Ich zeige nur den esential code an
Cursor cursor = mContext.getContentResolver().query(mUri, mProjections, null, null, null);
Logger.d(TAG, "*** cursor.getCount(): "+cursor.getCount());
while (cursor.moveToNext()) {
Logger.d(TAG, "| position: "+cursor.getPosition());
processMainCursor(serializer, cursor);
}
cursor.close();
processMainCursor() zeigt die Daten aus dem Cursor an und führt weitere Abfragen durch: eine für 4 Telefone, eine für 4 E-Mails und eine für 4 IM-Konten:
void processMainCursor(XmlSerializer serializer, Cursor main_cursor) {
writeCursorData(serializer, main_cursor); //writes cursor data, column by column
writePhoneEntities(serializer, main_cursor);
writeEmailEntities(serializer, main_cursor);
writeIMEntities(serializer, main_cursor);
}
In keinem meiner writeXXX
Methoden zum Schließen meiner main_cursor
Ich mache einfach eine neue Abfrage, drucke Daten und schließe den Cursor.
Also Statistik:
- cursor.getCount() = 695 ( siempre )
- Kommentierung writePhoneEntities, writeEmailEntities, writeIMEntities cursor.getCount() = last cursor.getPosition() = 695 ( so richtig! )
- ein/zwei/alle meine writeXEntities zeigt Zufälligkeit; Beispiel: alle lassen: last cursor.getPosition() zeigt manchmal 254, 257, 253, usw. an; wenn man nur Telefon & IM lässt: 514, 510, 511, usw. ( also verschiedene RUN -> verschiedene letzte cursor.getPosition() VALUE )
So oppinions.. Woran liegt das? Liegt es am Gedächtnis?
Update : Das Verlassen einer meiner writeXEntities wird am Ende in logcat angezeigt: Entfernen von toten Inhaltsanbietern: Kontakte
Aktualisierung 2 Hinzufügen von cursor.moveToFirst();
& eine Schleife wie
do {
//do whatever you want
} while (cursor.moveToNext());
hat die Arbeit nicht erledigt
Vielleicht liegt die Antwort also in diesen Logcat-Einträgen:
05-21 23:29:30.209: I/ActivityThread(7085): Removing dead content provider: contacts
05-21 23:29:30.209: I/ActivityThread(7085): Removing dead content provider: com.android.contacts
SAMPLE OF a writeXEntity ENTFERNT
LÖSUNG .. i war nicht Schließen der Cursor von writeXEntity (wahrscheinlich bleiben nach einer Weile ziemlich viele Cursor offen)
In Wirklichkeit habe ich so geschlossen
if(phone_cursor!=null && phone_cursor.getCount() > 0)
{
//... stuff
phone_cursor.close();
}
ich hätte nach dem Wenn schließen sollen
if(phone_cursor!=null && phone_cursor.getCount() > 0)
{
//... stuff
}
phone_cursor.close();
Ich schätze, einen Basilion-Cursor offen zu lassen, war die Antwort?!?