Retrofit ist ein typsicherer HTTP-Client für Android und Java. Retrofit macht es einfach, eine Verbindung zu einem REST-Webdienst herzustellen, indem die API in Java-Schnittstellen übersetzt wird. In diesem Tutorial zeige ich Ihnen, wie Sie eine der beliebtesten und meist empfohlenen HTTP-Bibliotheken für Android verwenden.
Diese leistungsstarke Bibliothek macht es einfach, JSON- oder XML-Daten zu verwenden, die dann in einfache alte Java-Objekte (POJOs) analysiert werden.. ERHALTEN
, POST
, STELLEN
, PATCH
, und LÖSCHEN
Anfragen können alle ausgeführt werden.
Wie die meisten Open-Source-Software wurde Retrofit auf einigen anderen leistungsstarken Bibliotheken und Tools aufgebaut. Hinter den Kulissen verwendet Retrofit OkHttp (vom selben Entwickler), um Netzwerkanfragen zu bearbeiten. Retrofit verfügt auch über keinen integrierten JSON-Konverter, um JSON-Objekte in Java-Objekte zu analysieren. Stattdessen wird die Unterstützung für die folgenden JSON-Konverter-Bibliotheken bereitgestellt, um dies zu verarbeiten:
com.squareup.retrofit: converter-gson
com.squareup.retrofit: converter-jackson
com.squareup.retrofit: converter-moshi
Für Protokollpuffer unterstützt Retrofit:
com.squareup.retrofit2: converter-protobuf
com.squareup.retrofit2: Konverterdraht
Und für XML unterstützt Retrofit:
com.squareup.retrofit2: Converter-Simpleframework
Die Entwicklung einer eigenen typsicheren HTTP-Bibliothek als Schnittstelle zu einer REST-API kann sehr schwierig sein: Sie müssen viele Funktionen ausführen, z. B. das Herstellen von Verbindungen, Zwischenspeichern, Wiederherstellen fehlgeschlagener Anforderungen, Threading, Antwortanalyse, Fehlerbehandlung und vieles mehr. Retrofit hingegen ist sehr gut geplant, dokumentiert und getestet - eine kampferprobte Bibliothek, die Ihnen viel kostbare Zeit und Kopfschmerzen erspart.
In diesem Lernprogramm werde ich erklären, wie Retrofit 2 zum Bearbeiten von Netzwerkanforderungen verwendet wird, indem eine einfache App zum Abfragen aktueller Antworten von der Stack Exchange-API erstellt wird. Wir werden durchführen ERHALTEN
Anforderungen durch Angabe eines Endpunkts-/ Antworten
, An die Basis-URL https://api.stackexchange.com/2.2/- angehängt. Dann erhalten Sie die Ergebnisse und zeigen sie in einer Recycling-Ansicht an. Ich werde Ihnen auch zeigen, wie Sie dies mit RxJava tun, um den Status- und Datenfluss auf einfache Weise zu verwalten.
Starten Sie Android Studio und erstellen Sie ein neues Projekt mit einer leeren Aktivität Hauptaktivität
.
Deklarieren Sie nach dem Erstellen eines neuen Projekts die folgenden Abhängigkeiten in Ihrem build.gradle
. Zu den Abhängigkeiten gehören eine Recycler-Ansicht, die Retrofit-Bibliothek und auch Googles Gson-Bibliothek zum Konvertieren von JSON in POJO (Plain Old Java Objects) sowie die Retrofit-Gson-Integration.
// Retrofit kompilieren 'com.squareup.retrofit2: retrofit: 2.1.0' // JSON-Analyse kompilieren 'com.google.code.gson: gson: 2.6.1' compile 'com.squareup.retrofit2: converter-gson: 2.1 .0 '// recyclerview kompilieren' com.android.support:recyclerview-v7:25.0.1 '
Vergessen Sie nicht, das Projekt zu synchronisieren, um diese Bibliotheken herunterzuladen.
Um Netzwerkoperationen durchzuführen, müssen wir die INTERNET
Erlaubnis im Anwendungsmanifest: AndroidManifest.xml.
Wir werden unsere Modelle automatisch aus unseren JSON-Antwortdaten erstellen, indem wir ein sehr nützliches Werkzeug einsetzen: jsonschema2pojo.
Kopieren Sie https://api.stackexchange.com/2.2/answers?order=desc&sort=activity&site=stackoverflow in die Adressleiste Ihres Browsers (oder Sie können Postman verwenden, wenn Sie mit diesem Tool vertraut sind). Dann drücken Eingeben-Dadurch wird eine GET-Anforderung auf dem angegebenen Endpunkt ausgeführt. Als Antwort sehen Sie ein Array von JSON-Objekten. Der Screenshot unten zeigt die JSON-Antwort mit Postman.
"items": ["owner": "reputation": 1, "user_id": 6540831, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/6a468ce8a8ff42c17923a6009ab77723 ? s = 128 & d = identicon & r = PG & f = 1 "," display_name ":" bobolafrite "," link ":" http://stackoverflow.com/users/6540831/bobolafrite "," is_accepted ": false," score " : 0, "last_activity_date": 1480862271, "creation_date": 1480862271, "answer_id": 40959732, "question_id": 35931342, "owner": "Reputation": 629, "user_id": 3054722, "user_type": "registered", "profile_image": "https://www.gravatar.com/avatar/0cf65651ae9a3ba2858ef0d0a7dbf900?s=128&d=identicon&r=PG&f=1", "display_name": "jeremy-denis", "link": "http : //stackoverflow.com/users/3054722/jeremy-denis "," is_accepted ": false," score ": 0," last_activity_date ": 1480862260," creation_date ": 1480862260," answer_id ": 40959731," question_id " : 40959661,…], "has_more": "true", "backoff": 10, "quota_max": 300, "quota_remaining": 241
Kopieren Sie diese JSON-Antwort entweder von Ihrem Browser oder von Postman.
Besuchen Sie nun jsonschema2pojo und fügen Sie die JSON-Antwort in das Eingabefeld ein.
Wählen Sie einen Quellentyp aus JSON, Anmerkungsstil von Gson, und deaktivieren Zusätzliche Eigenschaften zulassen.
Klicken Sie dann auf Vorschau Schaltfläche, um die Java-Objekte zu generieren.
Sie fragen sich vielleicht, was das ist @ SerializedName
und @Entlarven
Anmerkungen in diesem generierten Code. Keine Sorge, ich erkläre alles!
Das @ SerializedName
Anmerkung, damit Gson die JSON-Schlüssel mit unseren Feldern zuordnen kann. Gemäß der camelCase-Benennungskonvention von Java für Klassenmitgliedereigenschaften wird die Verwendung von Unterstrichen zum Trennen von Wörtern in einer Variablen nicht empfohlen. @ SerializedName
hilft bei der Übersetzung zwischen den beiden.
@SerializedName ("Quota_remaining") @Expose private Integer QuotaRemaining;
Im obigen Beispiel sagen wir Gson, dass unser JSON-Schlüssel quota_remaining
sollte dem Java-Feld zugeordnet werden QuoteRemaining
. Wenn beide Werte gleich waren, d. H., Wenn unser JSON-Schlüssel war QuoteRemaining
genau wie das Java-Feld, dann wäre das nicht nötig @ SerializedName
Anmerkung auf dem Feld, da Gson sie automatisch zuordnen würde.
Das @Entlarven
Die Anmerkung weist darauf hin, dass dieses Member für die JSON-Serialisierung oder Deserialisierung verfügbar gemacht werden sollte.
Kommen wir nun zu Android Studio zurück. Erstellen Sie ein neues Unterpaket im Hauptpaket und benennen Sie es Daten. Erstellen Sie in dem neu erstellten Datenpaket ein anderes Paket und benennen Sie es Modell-. Erstellen Sie im Modellpaket eine neue Java-Klasse und benennen Sie sie Inhaber
. Nun kopiere die Inhaber
Klasse, die von jsonschema2pojo generiert wurde, und fügte sie in die Inhaber
Klasse, die Sie erstellt haben.
import com.google.gson.annotations.Expose; importieren Sie com.google.gson.annotations.SerializedName; öffentliche Klasse Owner @SerializedName ("Reputation") @Expose private Integer-Reputation; @SerializedName ("user_id") @Expose private Integer userId; @ SerializedName ("user_type") @Expose private String userType; @SerializedName ("profile_image") @Expose private String profileImage; @SerializedName ("display_name") @Expose private String displayName; @ SerializedName ("link") @Expose private String-Verknüpfung; @SerializedName ("accept_rate") @Expose private Integer acceptRate; public Integer getReputation () Ruf zurückgeben; public void setReputation (Integer-Reputation) this.reputation = Reputation; public Integer getUserId () return userId; public void setUserId (Integer userId) this.userId = userId; public String getUserType () return userType; public void setUserType (String userType) this.userType = userType; public String getProfileImage () return profileImage; public void setProfileImage (String profileImage) this.profileImage = profileImage; public String getDisplayName () return displayName; public void setDisplayName (Zeichenfolge displayName) this.displayName = displayName; public String getLink () return link; public void setLink (String link) this.link = link; public Integer getAcceptRate () return acceptRate; public void setAcceptRate (Integer acceptRate) this.acceptRate = acceptRate;
Machen Sie dasselbe für ein neues Artikel
Klasse, kopiert von Jsonschema2pojo.
import com.google.gson.annotations.Expose; importieren Sie com.google.gson.annotations.SerializedName; öffentliche Klasse Item @SerializedName ("Besitzer") @Expose Private Owner Eigentümer; @SerializedName ("is_accepted") @Expose private Boolean isAccepted; @SerializedName ("score") @Expose private Integer-Punktzahl; @SerializedName ("last_activity_date") @Expose private Integer lastActivityDate; @SerializedName ("creation_date") @Expose privates Integer-Erstellungsdatum; @SerializedName ("answer_id") @Expose private Integer answerId; @SerializedName ("question_id") @Expose private Integer - frageId; @SerializedName ("last_edit_date") @Expose private Integer lastEditDate; öffentlicher Besitzer getOwner () return owner; public void setOwner (Eigentümer) this.owner = owner; public Boolean getIsAccepted () return isAccepted; public void setIsAccepted (Boolean isAccepted) this.isAccepted = isAccepted; public Integer getScore () return score; public void setScore (Ganzzahlpunktzahl) this.score = Punktzahl; public Integer getLastActivityDate () return lastActivityDate; public void setLastActivityDate (Integer lastActivityDate) this.lastActivityDate = lastActivityDate; public Integer getCreationDate () return creationDate; public void setCreationDate (Integer creationDate) this.creationDate = creationDate; public Integer getAnswerId () return answerId; public void setAnswerId (Integer answerId) this.answerId = answerId; public Integer getQuestionId () return questionId; public void setQuestionId (Integer questionId) this.questionId = questionId; public Integer getLastEditDate () return lastEditDate; public void setLastEditDate (Integer lastEditDate) this.lastEditDate = lastEditDate;
Erstellen Sie schließlich eine Klasse mit dem NamenSOAnswersResponse
für die zurückgegebenen StackOverflow-Antworten. Den Code für diese Klasse finden Sie in jsonschema2pojo als Beispiel
. Stellen Sie sicher, dass Sie den Klassennamen auf aktualisieren SOAnswersResponse
wo immer es auftritt.
import com.google.gson.annotations.Expose; importieren Sie com.google.gson.annotations.SerializedName; import java.util.List; öffentliche Klasse SOAnswersResponse @SerializedName ("items") @Expose private List- items = null; @SerializedName ("has_more") @Expose privates boolesches hasMore; @SerializedName ("Backoff") @Expose privates Integer-Backoff; @SerializedName ("Quota_max") @Expose private Integer QuotaMax; @SerializedName ("Quota_remaining") @Expose private Integer QuotaRemaining; öffentliche Liste
- getItems () gibt Elemente zurück; public void setItems (Liste
- items) this.items = items; public Boolean getHasMore () return hasMore; public void setHasMore (Boolean hasMore) this.hasMore = hasMore; public Integer getBackoff () return backoff; public void setBackoff (Integer backoff) this.backoff = backoff; public Integer getQuotaMax () return quotaMax; public void setQuotaMax (GanzzahlquotaMax) this.quotaMax = quotaMax; public Integer getQuotaRemaining () return quotaRemaining; public void setQuotaRemaining (GanzzahlquotaRemaining) this.quotaRemaining = quotaRemaining;
Um Netzwerkanforderungen an eine REST-API mit Retrofit auszustellen, müssen Sie eine Instanz mit der Retrofit.Builder
klassifizieren und mit einer Basis-URL konfigurieren.
Erstellen Sie ein neues Unterpaketpaket im Daten
Paket und benennen Sie es fernbedienung
. Jetzt innen fernbedienung
, Erstellen Sie eine Java-Klasse und benennen Sie sie RetrofitClient
. Diese Klasse erstellt ein Singleton von Retrofit. Retrofit benötigt zum Erstellen der Instanz eine Basis-URL. Daher übergeben wir beim Aufruf eine URL RetrofitClient.getClient (String baseUrl)
. Diese URL wird dann zum Erstellen der Instanz in Zeile 13 verwendet. In Zeile 14 geben wir auch den erforderlichen JSON-Konverter (Gson) an.
import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient privates statisches Retrofit retrofit = null; public static Retrofit getClient (String baseUrl) if (retrofit == null) retrofit = new Retrofit.Builder () .baseUrl (baseUrl) .addConverterFactory (GsonConverterFactory.create ()) .build (); Retrofit zurückgeben;
Erstellen Sie im Remote-Paket eine Schnittstelle, und rufen Sie sie an SOService
. Diese Schnittstelle enthält Methoden, die zum Ausführen von HTTP-Anforderungen verwendet werden, wie z ERHALTEN
, POST
, STELLEN
, PATCH
, und LÖSCHEN
. Für dieses Tutorial führen wir ein ERHALTEN
anfordern.
import com.chikeandroid.retrofittutorial.data.model.SOAnswersResponse; import java.util.List; import retrofit2.Call; import retrofit2.http.GET; public interface SOService @GET ("/ answers? order = desc & sort = activity & site = stackoverflow") AufrufgetAnswers (); @GET ("/ answers? Order = desc & sort = activity & site = stackoverflow") Aufruf getAnswers (@Query ("getaggt") String-Tags);
Das @ERHALTEN
Die Anmerkung definiert das explizit ERHALTEN
Anfrage, die ausgeführt wird, sobald die Methode aufgerufen wird. Jede Methode in dieser Schnittstelle muss über eine HTTP-Annotation verfügen, die die Anforderungsmethode und die relative URL enthält. Es sind fünf integrierte Anmerkungen verfügbar: @ERHALTEN
, @POST
, @STELLEN
, @LÖSCHEN
, und @KOPF
.
In der zweiten Methodendefinition haben wir einen Abfrageparameter hinzugefügt, um die Daten vom Server zu filtern. Nachrüstung hat die @Query ("Schlüssel")
Anmerkung, anstatt sie im Endpunkt fest zu codieren. Der Schlüsselwert steht für den Parameternamen in der URL. Es wird der URL von Retrofit hinzugefügt. Zum Beispiel, wenn wir den Wert übergeben "Android"
als ein Argument an die getAnswers (String-Tags)
Methode ist die vollständige URL:
https://api.stackexchange.com/2.2/answers?order=desc&sort=activity&site=stackoverflow&tagged=android
Parameter der Schnittstellenmethoden können die folgenden Anmerkungen haben:
@Pfad | Variablensubstitution für den API-Endpunkt |
@Abfrage | Gibt den Namen des Abfrageschlüssels mit dem Wert des annotierten Parameters an |
@Karosserie | Nutzlast für den POST-Aufruf |
@Header | Gibt den Header mit dem Wert des annotierten Parameters an |
Jetzt erstellen Sie eine Utility-Klasse. Wir werden es nennen ApiUtils
. Diese Klasse hat die Basis-URL als statische Variable und stellt auch die SOService
Schnittstelle zu unserer Anwendung durch die getSOService ()
statische Methode.
öffentliche Klasse ApiUtils public static final String BASE_URL = "https://api.stackexchange.com/2.2/"; public static SOService getSOService () return RetrofitClient.getClient (BASE_URL) .create (SOService.class);
Da die Ergebnisse in einer Recycler-Ansicht angezeigt werden, benötigen wir einen Adapter. Das folgende Codeausschnitt zeigt die AnswersAdapter
Klasse.
Die öffentliche Klasse AnswersAdapter erweitert RecyclerView.Adapterprivate Liste - MItems; privater Kontext mContext; privater PostItemListener mItemListener; public class ViewHolder erweitert RecyclerView.ViewHolder implementiert View.OnClickListener public TextView titleTv; PostItemListener mItemListener; public ViewHolder (Artikel ansehen, PostItemListener postItemListener) super (itemView); titleTv = (TextView) itemView.findViewById (android.R.id.text1); this.mItemListener = postItemListener; itemView.setOnClickListener (this); @Override public void onClick (Ansichtsansicht) item item = getItem (getAdapterPosition ()); this.mItemListener.onPostClick (item.getAnswerId ()); notifyDataSetChanged (); public AnswersAdapter (Kontextkontext, Liste.)
- posts, PostItemListener itemListener) mItems = posts; mContext = Kontext; mItemListener = itemListener; @Override public AnswersAdapter.ViewHolder onCreateViewHolder (ViewGroup-übergeordnetes Element, int viewType) Kontext Kontext = parent.getContext (); LayoutInflater inflater = LayoutInflater.from (Kontext); PostView anzeigen = inflater.inflate (android.R.layout.simple_list_item_1, parent, false); ViewHolder viewHolder = neuer ViewHolder (postView, this.mItemListener); return viewHolder; @Override public void onBindViewHolder (AnswersAdapter.ViewHolder-Inhaber, int-Position) item item = mItems.get (position); TextView textView = holder.titleTv; textView.setText (item.getOwner (). getDisplayName ()); @Override public int getItemCount () return mItems.size (); public void updateAnswers (Liste.)
- items) mItems = items; notifyDataSetChanged (); private Item getItem (int adapterPosition) return mItems.get (adapterPosition); öffentliche Schnittstelle PostItemListener void onPostClick (long id);
In der onCreate ()
Methode der Hauptaktivität
, wir initialisieren eine Instanz von SOService
Schnittstelle (Zeile 9), die Recycler-Ansicht und auch den Adapter. Zum Schluss nennen wir das loadAnswers ()
Methode.
private AnswersAdapter mAdapter; private RecyclerView mRecyclerView; privater SOService mService; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mService = ApiUtils.getSOService (); mRecyclerView = (RecyclerView) findViewById (R.id.rv_answers); mAdapter = new AnswersAdapter (diese neue ArrayList- (0), neuer AnswersAdapter.PostItemListener () @Override public void onPostClick (lange ID) Toast.makeText (MainActivity.this, "Post-ID ist" + ID, Toast.LENGTH_SHORT). ); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager (this); mRecyclerView.setLayoutManager (layoutManager); mRecyclerView.setAdapter (mAdapter); mRecyclerView.setHasFixedSize (true); RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration (this, DividerItemDecoration.VERTICAL_LIST); mRecyclerView.addItemDecoration (itemDecoration); loadAnswers ();
Das loadAnswers ()
Methode macht eine Netzwerkanforderung durch Aufrufen Enqueue ()
. Wenn die Antwort zurückkommt, hilft uns Retrofit beim Analysieren der JSON-Antwort in eine Liste von Java-Objekten. (Dies wird durch die Verwendung von ermöglicht GsonConverter
.)
public void loadAnswers () mService.getAnswers (). enqueue (neuer Rückruf)() @Override public void onResponse (Aufruf anrufen, antworten Antwort) if (response.isSuccessful ()) mAdapter.updateAnswers (response.body (). getItems ()); Log.d ("MainActivity", "von API geladene Beiträge"); else int statusCode = response.code (); // Anforderungsfehler in Abhängigkeit vom Statuscode behandeln @Override public void onFailure (Call call, Throwable t) showErrorMessage (); Log.d ("MainActivity", "Fehler beim Laden von API"); );
Enqueue ()
Enqueue ()
asynchron sendet die Anforderung und benachrichtigt Ihre App mit einem Rückruf, wenn eine Antwort zurückkommt. Da diese Anforderung asynchron ist, wird sie von Retrofit in einem Hintergrundthread verarbeitet, sodass der Haupt-UI-Thread nicht blockiert oder gestört wird.
Benutzen Enqueue ()
, Sie müssen zwei Callback-Methoden implementieren:
onResponse ()
onFailure ()
Nur eine dieser Methoden wird als Antwort auf eine gegebene Anforderung aufgerufen.
onResponse ()
: für eine empfangene HTTP-Antwort aufgerufen. Diese Methode wird für eine Antwort aufgerufen, die auch dann korrekt verarbeitet werden kann, wenn der Server eine Fehlernachricht zurückgibt. Wenn Sie also einen Statuscode von 404 oder 500 erhalten, wird diese Methode trotzdem aufgerufen. Um den Statuscode zu erhalten, damit Sie mit darauf basierenden Situationen umgehen können, können Sie die Methode verwenden Antwortcode()
. Sie können auch die ist erfolgreich()
Methode, um herauszufinden, ob der Statuscode im Bereich von 200 bis 300 liegt, was den Erfolg anzeigt.onFailure ()
: Wird aufgerufen, wenn eine Netzwerkausnahme bei der Kommunikation mit dem Server aufgetreten ist oder wenn eine unerwartete Ausnahmebedingung aufgetreten ist, bei der die Anforderung oder die Antwort verarbeitet wurde. Um eine synchrone Anforderung auszuführen, können Sie das verwenden ausführen()
Methode. Beachten Sie, dass synchrone Methoden im Haupt- / UI-Thread alle Benutzeraktionen blockieren. Führen Sie also keine synchronen Methoden im Haupt- / UI-Thread von Android aus! Führen Sie sie stattdessen in einem Hintergrundthread aus.
Sie können die App jetzt ausführen.
Wenn Sie ein Fan von RxJava sind, können Sie Retrofit problemlos mit RxJava implementieren. In Retrofit 1 wurde es standardmäßig integriert, aber in Retrofit 2 müssen Sie einige zusätzliche Abhängigkeiten hinzufügen. Retrofit wird mit einem Standardadapter zur Ausführung geliefert Anruf
Instanzen. Sie können den Ausführungsmechanismus von Retrofit so ändern, dass RxJava eingeschlossen wird, indem Sie RxJava einschließen CallAdapter
.
Fügen Sie die Abhängigkeiten hinzu.
"io.reactivex: rxjava: 1.1.6" kompilieren "io.reactivex: rxandroid: 1.2.1" compile "com.squareup.retrofit2: adapter-rxjava: 2.1.0" kompilieren
Fügen Sie den neuen CallAdapter hinzu RxJavaCallAdapterFactory.create ()
beim Erstellen einer Retrofit-Instanz.
public static Retrofit getClient (String baseUrl) if (retrofit == null) retrofit = new Retrofit.Builder () .baseUrl (baseUrl) .addCallAdapterFactory (RxJavaCallAdapterFactory.create ()) .addConverterFactory.) (); Retrofit zurückgeben;
Aktualisieren Sie jetzt die getAnswers ()
Methoden, um zurückzukehren Beobachtbar
s:
@GET ("/ answers? Order = desc & sort = activity & site = stackoverflow") BeobachtbargetAnswers (); @GET ("/ answers? Order = desc & sort = activity & site = stackoverflow") Beobachtbar getAnswers (@Query ("getaggt") String-Tags);
Bei der Anfrage reagiert unser anonymer Teilnehmer auf den beobachtbaren Datenstrom, der in unserem Fall Ereignisse auslöst SOAnswersResponse
. Das onNext
Die Methode wird dann aufgerufen, wenn unser Abonnent ein Ereignis empfängt, das an unseren Adapter weitergeleitet wird.
@Override public void loadAnswers () mService.getAnswers (). SubscribeOn (Schedulers.io ()). ObservOn (AndroidSchedulers.mainThread ()) .subscribe (neuer Abonnent)() @Override public void onCompleted () @Override public void onError (Throwable) @Override public void onNext (SOAnswersResponse soAnswersResponse) mAdapter.updateAnswers (soAnswersResponse.getItems); );
Weitere Informationen zu RxJava und RxAndroid finden Sie unter Erste Schritte mit ReactiveX auf Android von Ashraff Hathibelagal.
In diesem Lernprogramm haben Sie etwas über Retrofit erfahren: Warum sollten Sie es verwenden und wie. Ich habe auch erklärt, wie man die RxJava-Integration mit Retrofit hinzufügt. In meinem nächsten Beitrag zeige ich Ihnen, wie Sie mitspielen POST
, STELLEN
, und LÖSCHEN
, wie senden Formular-Urlencodiert
Daten und wie man Anfragen storniert.
Weitere Informationen zu Retrofit finden Sie in der offiziellen Dokumentation. In der Zwischenzeit können Sie einige unserer anderen Kurse und Tutorials zur Entwicklung von Android-Apps ausprobieren.