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?
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.
>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%