Robospice / Retrofit Hintergrunddienst auf die Datenbank zugreifen

8

Ich habe erfolgreich einen Retrofit API-Rest-Client erstellt, der beide GET & amp; POST ruft auf und fügt das auch in Robospice als Hintergrunddienst ein.

Ich möchte jedoch, dass der Robospice -Dienst eine Verbindung zur Datenbank herstellt und die abgerufenen Objekte asynchron aus dem GET -Aufruf persistent macht. Die Verwendung der Klasse Retrofit Callback scheint der naheliegendste Weg zu sein, aber die Verbindung zur Datenbank erfordert Context und ich bin besorgt, dass Context verloren geht.

Also, was wäre der beste Ansatz, um Robospice SpiceService Daten vor und nach der Verarbeitung einer Anfrage in der Datenbank zu erhalten?

    
saywhatnow 25.09.2013, 22:25
quelle

2 Antworten

2

Am Ende, während ich die verschiedenen Rest API-Serviceaufrufe zum Speichern von Radio staple ( Reto Meier Dev Bytes: Effiziente Datenübertragungen ), ich nenne die Rest API Dienste ( RetrofitSpiceService s) von einem Controller Robospice SpiceService , der sowohl den Verweis auf DatabaseHelper enthält (erfordert Context ) und die entsprechenden Retrofit -Rückrufe für die Rest -Dienste.

Auf diese Weise behandelt der Controller-Service die gesamte Auslösung ( AlarmManager löst den Controller-Service aus) und persistiert auf DB, und die Rest-Services können sich wie üblich ohne Kenntnis von context , database oder ähnlichem ausschalten / p>

Für @ lion789:
Ich habe 4 Modelle mit jeweils einem entsprechenden API-Aufruf zur Synchronisation mit dem Server (1 POST , 3 GET ).
Um diese Synchronisierungsaufrufe zu verarbeiten, habe ich ein IntentService , das 4 SpiceManager -Attribut und 4 Retrofit Callback -Klassen enthält - eine für jedes Modell / API-Aufruf.
Die IntentService wird an eine Enum übergeben, die eine Sequenz von APIs angibt, die aufgerufen werden sollten.
Das IntentService ruft das entsprechende SpiceManager auf, das ausgeführt wird, dann löst Callback die Persistenz aus und ruft eine IntentService -Methode auf, um den nächsten API-Aufruf in der Sequenz auszulösen.

Eine Menge davon ist abstrahiert und Schnittstelle wie ich es für meine Auth und Push-Registrierung Code verwenden, so ist es ein bisschen ein Alptraum zu beschreiben, aber es funktioniert bisher ziemlich gut.

>     
saywhatnow 07.10.2013, 04:11
quelle
2

Ihre Frage ist wirklich unscharf für mich. Ich verstehe nicht, warum Sie den normalen Persistenzmechanismus von RS nicht verwenden können. Wenn Sie dies tun, ist es ziemlich einfach, Ihre Daten persistent zu machen, wenn Anfragen ausgeführt wurden.

Vielleicht vermisse ich etwas. Also, wenn Ihre Anforderung ist, Daten persistent zu halten, dann sieht der Ansatz, den Sie vorschlagen, richtig aus. Sie könnten den Spice-Service selbst in Ihre Anfrage einfügen (siehe zum Beispiel, wie addRequest in RetrofitSpiceService überschrieben wird). Die Anforderung würde dann einen Kontext enthalten, der für die Persistenz innerhalb eines Callbacks oder innerhalb der Anfrage selbst verwendet werden kann.

Vor kurzem habe ich eine POST-Anfrage mit Retrofit und RS verschlüsselt. Ich habe die Signatur der POST-Anfrage geändert, um eine Leere zurückzugeben. Dann leicht modifiziert den Retrofit-Konverter, um mit diesem Fall umzugehen und null zurück zu geben. Die Anfrage erhielt den Spice-Service per Injektion wie bereits erwähnt und könnte einige Aktionen in der Datenbank durchführen.

Hier ist ein Code, um die Anwendung in eine Anfrage innerhalb eines Gewürzdienstes zu injizieren.

%Vor%     
Snicolas 11.10.2013 08:22
quelle

Tags und Links