Ich habe einen Cursor, der einen summierten Doppel equivalane zu SELECT SUM(balance) FROM accounts WHERE accountName="accountY" OR description="descriptionX"
auf folgende Weise zurück:Unerwartete Ergebnisse, wenn sie durch den Rückgabewert von Cursor Looping
public Double itemSum(String[] sumCriteria) {
Cursor cursor = mainAccountsDatabase.rawQuery("SELECT SUM(balance) FROM accounts WHERE ?=? OR description=?",
new String[]{sumCriteria[0], sumCriteria[1], sumCriteria[2]});
if (cursor.moveToFirst()) {
return cursor.getDouble(0);
}
return null;
}
In meinem Java-Code habe ich folgendes:
public void dbGenerator(AccountAdapterView adapter, String filter1, String filter2, String filter3) {
NumberFormat formatter = NumberFormat.getCurrencyInstance();
for (int i = 0; i < listFromDB.size(); i++) {
ListParser newAccount;
String accountNameDisplay = listFromDB.get(i).getaccountName();
String descriptionDisplay = listFromDB.get(i).getDescription();
Double balanceCompare = maSource.itemSum(new String[]{"accountName",accountNameDisplay,accountNameDisplay, "null"});
Double balance = listFromDB.get(i).getBalance();
String formatted = formatter.format(balance);
newAccount = new ListParser(accountNameDisplay, descriptionDisplay, formatted);
adapter.add(newAccount);
}
}
Dabei ist listFromDB
eine vorbelegte ListArray
, die die Namen der Konten aus der Spalte "accountName"
des DB enthält.
prüfen logcat
die erste Ausgabe der 10 Probenreihen führt zu einem unsummed Wert, wo die erste bevölkerungsListenElement entspricht "description"
Spalte und die folgenden 9 Summen sind 0.
Wenn ich die SQL jedem von ausführen die 10 Zeilen bekomme ich die richtige Summe. Warum liefert der Cursor eine andere Ausgabe?
Hier ist eine kleine Darstellung, wie die Daten aussehen.
accountName,description,balance
account1,description1,500
account2,description2,20
account3,description3,-68
account4,account1,-1000
account5,description4,400
account6,account2,180
"Wenn logcat die erste Ausgabe der 10 Beispielzeilen überprüft, ergibt sich ein nicht summierter Wert für die Stelle, an der das erste ausgefüllte Listenelement mit der Spalte" description "übereinstimmt und die folgenden 9 Summen 0 sind." - Vielleicht möchten Sie dies erweitern. Es ist schwer, Ihr Problem zu sehen, vor allem, da Sie nicht auch "getBalance" zur Verfügung gestellt haben. –
In Bezug auf den zitierten Text, in meinen Beispieldaten hat 'account1' als der erste accountName. Die zweite Spalte hat "account4" als accountName und "account1" als Beschreibung. Ich würde das -1000 für meine erste Summe und dann 0 für Ruhe bekommen. Wie für getBalance ist nur ein Getter, der das Gleichgewicht aus dem ListArray 'listFromDB' nichts besonderes darüber erhält. Ich habe auch die 'accountName' und' description' ausgegeben, die an 'itemSum' gesendet werden und alles in der richtigen Reihenfolge. – Leb