Refresh / Reload Datenbankreferenz in benutzerdefinierten ContentProvider nach der Wiederherstellung

7

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?

    
ssuperz28 22.11.2011, 23:01
quelle

4 Antworten

6

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!

    
Devunwired 22.11.2011, 23:56
quelle
26

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:

%Vor%

Fügen Sie die reset-Methode zu Ihrer ContentProvider -Implementierung hinzu:

%Vor%     
ptc 23.11.2011 00:20
quelle
1

Hier ist meine Lösung.

%Vor%

query(), insert(), update(), delete() verwenden getDbHelper() , um eine SQLiteDatabase

zu erhalten

Der vollständige Code meiner Android App ist hier verfügbar, wenn Sie weitere Informationen benötigen .

    
mmathieum 08.04.2012 15:08
quelle
0

Sie können die Methode delete auch ohne Auswahl verwenden:

%Vor%     
stef 13.10.2015 15:05
quelle

Tags und Links