2016-10-06 2 views
0

Ich arbeite mit Android am Frontend und ich verwende Spring REST-Client-Bibliotheken, um HTTP-Anfragen an einen REST-Web-Service zu senden. Ich habe Beispiele online gelesen, wo Leute AsyncTask verwenden, um dies mit einem RestTemplate in doInBackground Methode von AsyncTask zu erreichen, aber ich habe auch Beispiele gelesen, wo RestTemplate außerhalb von AsyncTask verwendet wird, auch in einer Aktivität oder einem Fragment. Ist es sinnvoll, eine Methode gegenüber der anderen zu verwenden?Empfangen von Antworten in Android von einem Spring REST-Service

Zweitens, wenn eine Antwort vom Server durch RestTemplate exchange oder getForAllObject empfangen wird, sollte mein Client basierend auf den empfangenen Daten verschiedene Dinge tun. Wenn ich zum Beispiel nach Benutzern suchen möchte, sollte ich User Objekte erhalten und dann sollte mein Client das Fragment/die Aktivität des Benutzers aktualisieren, aber wenn ich mich anmelden möchte, sollte ich andere Daten erhalten und mein Client sollte verschiedene nachfolgende Aufgaben durchführen.

Wenn ich jedes Mal eine AsyncTask erstelle, wenn ich eine HTTP-Anforderung sende und dann die Antwort erhalte, wie kann ich unterscheiden, welche nachfolgenden Aufgaben clientseitig ausgeführt werden müssen? Ist die bevorzugte Methode, Enums zu verwenden? Zum Beispiel, wenn ich Daten von einem Server erhalten möchte, kann ich eine AsyncTask instanziieren und als execute Parameter eine Aufzählung übergeben, um festzulegen, welche HTTP-Anfrage gesendet werden soll und eine Aufzählung, um festzulegen, was mit empfangenen Daten zu tun ist. Dann könnte ich einfach Switch-Anweisungen verwenden, die verschiedene Funktionen aufrufen, basierend auf der Enumeration?

Wenn dies alles nicht sinnvoll ist, gibt es eine Standardmethode, um Antworten von dem Server zu behandeln?

Antwort

0

Von docs

AsyncTask ermöglicht korrekte und einfache Nutzung des UI-Thread. Mit dieser Klasse können Sie Hintergrundoperationen ausführen und Ergebnisse im UI-Thread veröffentlichen, ohne Threads und/oder Handler bearbeiten zu müssen.

AsyncTask bietet eine praktische Möglichkeit, Aufgaben im Hintergrund auszuführen und mit dem Hauptthread der Benutzeroberfläche zu interagieren. Wenn Sie AsyncTasks nicht verwendet haben, müssen Sie Ihre eigenen Methoden zur Synchronisierung mit dem Hauptthread implementieren, um die Benutzeroberfläche zu aktualisieren. Wenn Sie Back-End-Dienste aufrufen oder lang andauernde Operationen ausführen, ist es immer gut, asynchrone Tasks zu verwenden.

Es ist eine schlechte Übung, denselben REST-Endpunkt zu haben, um verschiedene Objekte basierend auf einer Aufzählung zurückzugeben. Habe zwei getrennte Endpunkte. Ein GET-Aufruf zum Suchen von Benutzern und ein POST-Aufruf zum Anmelden von Benutzern. Auf der Client-Seite haben auch separate Implementierungen auf den Verbrauch von über die Endpunkte. Verwenden Sie sie bei Bedarf entsprechend.

+0

Ich bin mir immer noch nicht sicher, wie das funktioniert. Wenn ich über eine Funktion zum Senden einer GET-Anforderung und eine Funktion zum Senden einer POST-Anforderung verfüge, würden nicht beide dieser Funktionen eine Klasse instanziieren, die AsyncTask im Hintergrund ausführen lässt, um die Anforderung zu senden und die Antwort zu empfangen? Wie also würde AsyncTask während des Aufrufs von onPostExecution wissen, wohin von dort aus zu gehen, ohne zu wissen, ob die anfängliche HTTP-Anfrage eine POST- oder GET-Anfrage war? Müsste ich stattdessen eine AsyncTask für jede Art von HTTP-Anfrage, die ich senden möchte (eine für die Anmeldung, eine für die x-Daten, eine für die y-Daten) erweitern? – Biiiiiird

+0

Sie müssen zwei separate Async-Aufgaben haben. Als Beispiel UserSearchAsyncTask und UserLoginAsyncTask. Beide Klassen erweitern AsyncTask. Dann jede Klasse wo nötig. Normalerweise haben Sie separate Aktivitäten oder Fragmente, um diese beiden Szenarien zu behandeln. –

Verwandte Themen