Ich verwende die SQLiteAssetHelper-Bibliothek, um mit meinen App-DB-Vorgängen fertig zu werden, und sie funktioniert für fast jedes Telefon, mit dem ich getestet habe. Einige Benutzer mit Android 2.3.3 - 2.3.7 melden jedoch einen Absturz, wenn ein Aufruf zum Öffnen der Datenbank erfolgt. Ich vermute, dass dies auf ein Problem zurückzuführen ist, das beim ersten Kopieren der Datenbank aus dem Asset-Ordner auftritt (z. B. nicht genügend Speicherplatz im internen Speicher).
Helferklasse:
%Vor%Handler Class (Ich setze einen Zähler auf Timeout nach 10s wenn db nicht geöffnet werden kann) :
%Vor%Aufrufende Klasse:
%Vor%Ausnahme:
%Vor%Möglicherweise haben die Benutzer ihren Speicher gelöscht oder sie haben keine SD-CARD?
Wahrscheinlich läuft es bei sporadischen Abstürzen.
** Haben Sie die oncreate- und onupgrade-Methoden implementiert?
Ich benutze den offenen Helfer. So habe ich nie Probleme beim Öffnen der Datenbank.
%Vor%...
%Vor%Viel Glück
Diese Frage hatte keine akzeptierte Antwort, obwohl das OP darauf hinwies, dass es in den Kommentaren gelöst wurde. Also hier ist die Antwort:
Versuchen Sie nicht, die Datenbank mit einem AsyncTask
zu kopieren, das von einer Methode aufgerufen wird (z. B. onCreate
), und versuchen Sie dann, ListView
mit Daten aus der Datenbank in derselben Methode aufzufüllen. Wenn die AsyncTask
nicht bis zu dem Zeitpunkt fertig ist, an dem ListView
die Daten benötigt, wird eine NullPointerException ausgelöst.
Füllen Sie stattdessen ListView
aus der onPostExecute
-Methode von AsyncTask
aus. Dadurch wird sichergestellt, dass die Datenbank das Kopieren beendet hat.