Ich habe eine Android-App, und alle meine Tests waren bisher auf meinem Froyo-Handy. Ich habe gerade mit dem Testen gegen 1.6 und 2.1 im Emulator begonnen, und es stürzt beim Start ab. Es kann keine Spalte in einer meiner Ansichten finden.
%Vor%Das Schema der Ansicht ist wie folgt:
%Vor% Wenn adb shell
eine Verbindung zu den verschiedenen Emulatorinstanzen herstellt, habe ich bestätigt, dass (1) das korrekte Schema in allen Fällen vorhanden ist und (2) in 1.6 und 2.1, SQLite kann die Spalten in diesem Verzeichnis nicht finden Ansicht, sogar mit etwas so einfach wie
oder
%Vor%Es funktioniert gut auf 2.2.
Meine Vermutung ist also, dass sich in SQLite zwischen Android 2.1 und 2.2 etwas geändert hat. Diese Antwort gibt hilfreich die SQLite-Versionen, die mit jedem geliefert wurden Android-API-Ebene Es besagt, dass SQLite von 3.5.9 auf 3.6.22 zwischen 2.1 und 2.2 aktualisiert wurde. Beim Betrachten der SQLite-Versionsgeschichte sehe ich nichts besonders Offensichtliches, was den Unterschied erklären könnte.
Kann jemand genau herausfinden, was sich geändert hat, und vorschlagen, wie ich es umgehen kann, damit mein Code auf Pre-Froyo-Geräten funktioniert?
Ich habe genau das gleiche Problem in meiner App. Der gemeinsame Nenner ist, dass ich auch Ansichten verwende und Fremdschlüssel habe.
Ich habe meine Datenbank vom Emulator heruntergeladen. Ich habe keine Probleme, die Abfrage außerhalb des Android OS 2.1 auszuführen.
Habe die Antwort von mp2526 gegeben, aber die Abfrage mit "columnx AS columnx" machte keinen Unterschied. Ich werde versuchen, das Problem zu isolieren.
Ich habe bei der Verwendung von DISTINCT auf ein Problem mit SQLite gestoßen, bei dem es sich um das gleiche Problem handelt, mit dem Sie SUM umgehen.
Bei früheren Betriebssystemversionen musste ich bei der Verwendung von DISTINCT die Spaltennamen aliasieren oder die Logik würde mit einem ähnlichen, wenn nicht genau dem gleichen Fehler fehlschlagen (ich erinnere mich nicht genau, was der Fehler war), aber ich vermute, dass sie behoben wurden es in späteren OS-Versionen.
Beispiel
%Vor%funktioniert für alle Betriebssystemversionen während
%Vor%würde bei früheren Betriebssystemen fehlschlagen
Das Problem ist, dass Android 2.1 die Spalten zusammen mit ihren Tabellennamen zurückgibt, also eine Abfrage wie
%Vor% gibt eine Spalte mit dem Namen table.id
Die Lösung ist, wie schon erwähnt,
zu schreiben %Vor%