Ich benutze einen ContentProvider in meiner App und alles funktioniert gut, bis auf ein kleines Problem. Ich habe eine Sicherungs- und Wiederherstellungsfunktion, die die Datenbank in eine Datei auf der SD-Karte sichert, und dann können diese Sicherungsdateien wiederhergestellt werden, um die aktuelle Datenbank zu überschreiben. Der gesamte Prozess funktioniert, aber der ContentProvider enthält immer noch den Verweis / Cache auf die ursprüngliche Datenbank, sobald eine der alten Sicherungsdateien wiederhergestellt wurde. Ich kann anscheinend keine Möglichkeit finden, die Datenbankreferenz im ContentProvider zu aktualisieren oder neu zu laden. Ich weiß, dass die Wiederherstellung funktioniert, weil ich die Datensätze in der Datenbank mit SQLite Editor sehen kann und wenn ich die App schließe und wieder öffne, zeigt sie die korrekten Aufzeichnungen an.
Weiß jemand einen Weg, dies zu tun? Gibt es eine Möglichkeit, den ContentProvider, den ich nicht sehe, zu schließen und erneut zu öffnen?
Behalten Sie einen Verweis auf die tatsächliche SQLiteDatabase
in Ihrem Content-Provider (etwas wie das Aufrufen von SQLiteOpenHelper.getWritableDatabase()
in onCreate()
und dann das Behalten dieser Referenz)? Oder erhalten Sie das DB-Objekt von irgendeinem Ort wie ein Helfer in jeder Anbietermethode?
Wenn Sie nur einen lokalen Verweis auf den Helper behalten und die beschreibbare / lesbare Datenbankinstanz innerhalb jeder Methode nach Bedarf abrufen, sollte dieses Problem normalerweise behoben werden. Wenn nicht, können wir uns vielleicht den Anbietercode ansehen?
Hoffe, dass hilft!
Wenn Sie & gt; = API 5 targetieren, können Sie einen Verweis auf Ihre ContentProvider
über eine ContentProviderClient
erhalten und eine für Ihre Implementierung spezifische Methode ausführen:
Fügen Sie die reset-Methode zu Ihrer ContentProvider
-Implementierung hinzu: