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