Anruf innerhalb AsyncTask nachrüsten

8

Ich habe kürzlich mit der Entwicklung einer Android-App begonnen und mich entschieden, Retrofit als Client eines REST-Dienstes zu verwenden. Ich bin mir jedoch nicht sicher, ob mein Ansatz gut ist:

ich. Ich habe einen asynchronen Aufruf meiner API implementiert, der in der doInBackground-Methode von AsyncTask aufgerufen wird. Die Sorge : diesen Artikel gelesen zu haben Ich bin verwirrt. Sind AsyncTasks nicht für diese Art von Aufgaben geeignet? Soll ich den Aufruf der API direkt von der Aktivität aus tätigen? Ich verstehe, dass die Callback-Methoden von Retrofit auf dem UI-Thread ausgeführt werden, aber wie steht es mit dem Aufruf über HTTP? Erstellt Retrofit Threads dafür?

ii. Ich möchte, dass die AuthenticationResponse in einem SharedPreferences-Objekt gespeichert wird, das innerhalb der Erfolgsmethode des Callbacks nicht verfügbar zu sein scheint. Irgendwelche Vorschläge / gute Praktiken?

Vielen Dank im Voraus:)

Hier ist mein DoInBackGroundMethod:

%Vor%     
user3159152 28.03.2015, 21:58
quelle

1 Antwort

27

Ich. Retrofit unterstützt drei Möglichkeiten, eine Anfrage zu stellen:

  • synchron

Sie müssen eine Methode deklarieren, die die Antwort als Wert zurückgibt, zum Beispiel:

%Vor%

Diese Methode wird im Thread ausgeführt, in dem aufgerufen wird. Also kannst du es nicht im Haupt / UI-Thread nennen.

  • asynchron

Sie müssen die Methode void deklarieren, die den Rückruf mit der Antwort als letzten Parameter enthält, zum Beispiel:

%Vor%

Die Ausführung der Anforderung wird im neuen Hintergrundthread aufgerufen, und die Callback-Methoden werden im Thread ausgeführt, dessen Methode aufgerufen wird. So können Sie diese Methode im Haupt / UI-Thread ohne neuen Thread / AsyncTask aufrufen.

  • Verwenden von RxAndroid

Der letzte Weg, den ich kenne, ist eine Methode, die RxAndroid verwendet. Sie müssen eine Methode deklarieren, die die Antwort als beobachtbar mit Wert zurückgibt. Zum Beispiel:

%Vor%

Diese Methode unterstützt auch die Netzwerkanforderung in einem neuen Thread. Sie müssen also keinen neuen Thread / AsyncTask erstellen. Der Action1-Callback von der subscribe-Methode wird in UI / main thread aufgerufen.

II. Sie können Ihre Methode einfach in Activity aufrufen und Ihre Daten wie unten gezeigt in SharedPreferences schreiben:

%Vor%     
Konrad Krakowiak 30.03.2015, 08:07
quelle