Loopj ist eine Android-Bibliothek zum Erstellen asynchroner HTTP-Anforderungen. Ich mag es wegen seiner Benutzerfreundlichkeit und Einfachheit. Er wurde von James Smith entwickelt und ist auch als "Android Asynchronous HTTP Client" bekannt. Er wird von Unternehmen wie Instagram, Pinterest und vielen anderen verwendet. Es ist ein guter Einstieg in die Welt der HTTP-Bibliotheken und hilft Ihnen, wichtige Konzepte sehr leicht zu verstehen.
Um die Verwendung dieser Bibliothek zu erlernen, erstellen wir MovieTrivia, eine einfache App, die eine Verbindung zu einem Webdienst herstellt, um Informationen über Filme oder Fernsehsendungen abzurufen und dem Benutzer diese Informationen anzuzeigen.
Erstellen Sie zunächst ein neues Android Studio-Projekt mit einer leeren Aktivität. Um Loopj aufzunehmen, kopieren Sie die Abhängigkeit von der offiziellen Website. Sie finden die Abhängigkeit im Abschnitt "Installation und grundlegende Verwendung" der Website (oder kopieren Sie einfach die Zeichenfolge unten)..
"com.loopj.android:android-async-http:1.4.9" kompilieren
Die Meldung "Jetzt synchronisieren" erscheint in der rechten oberen Ecke. Klicken Sie darauf, damit Gradle die Bibliothek herunterlädt und für Ihr Projekt verfügbar macht.
Da die App eine Verbindung zum Internet herstellt, müssen wir die entsprechende Berechtigung für den Benutzer zur Berechtigung erklären. Öffne dein AndroidManifest.xml
Datei und kurz vor dem Anwendung
tag, schreiben:
Jetzt können Sie Loopj in Ihrer App verwenden.
Wir werden eine möglichst einfache Benutzeroberfläche erstellen: a Textfeld
um einen Suchbegriff einzugeben, a Taste
um die Suche durchzuführen, und a Textvorschau
um die Ergebnisse anzuzeigen. Öffnen activity_mail.xml
und fügen Sie die erforderlichen UI-Komponenten wie unten gezeigt hinzu.
Nun, wie üblich, verdrahten Sie diese Komponenten in Ihrem MainActivity.java
.
public class MainActivity erweitert AppCompatActivity implementiert View.OnClickListener EditText etSearchTerms; Schaltfläche btnSearch; TextView tvSearchResults; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); etSearchTerms = (EditText) findViewById (R.id.etSearchTerms); btnSearch = (Button) findViewById (R.id.btnSearch); tvSearchResults = (TextView) findViewById (R.id.tvSearchResults); btnSearch.setOnClickListener (this); @Override public void onClick (View v) String searchTerm = etSearchTerms.getText (). ToString (); etSearchTerms.setText (""); // Loopj-HTTP-Aufruf durchführen
Erstellen Sie eine separate Java-Klasse, um Ihren Code sauber und organisiert zu halten, MyLoopjTask.java
, den gesamten Loopj-spezifischen Code und alle Operationen enthalten. Sie benötigen zwei Instanzvariablen, eine vom Typ RequestParams
um die Suchdetails in die URL und einen anderen Typ zu integrieren AsyncHttpClient
um tatsächlich die HTTP-Anfragen zu machen. Bevor Sie fortfahren, überprüfen Sie, ob Android Studio diese erforderlichen Importe hinzugefügt hat.
import org.json.JSONObject; import cz.msebera.android.httpclient.Header;
Erstellen Sie auch eine Methode, die die Benutzerabfrage als Argument verwendet. Hier wird die eigentliche Arbeit ausgeführt.
public class MyLoopjTask privates statisches final String TAG = "MOVIE_TRIVIA"; AsyncHttpClient asyncHttpClient; RequestParams AnfrageParams; String BASE_URL = "http://www.omdbapi.com/?"; String jsonResponse; public MyLoopjTask () asyncHttpClient = new AsyncHttpClient (); requestParams = new RequestParams (); public void executeLoopjCall (String queryTerm) requestParams.put ("s", queryTerm); asyncHttpClient.get (BASE_URL, requestParams, neuer JsonHttpResponseHandler () @Override public void onSuccess (int statusCode, Header [] Header, JSONObject-Antwort) super.onSuccess (statusCode, Header, Response); Log.i (TAG, "onSuccess:" + jsonResponse); @Override public void onFailure (int statusCode, Header [] Header, Throwable throwable, JSONObject errorResponse) super.onFailure (statusCode, Header, throwable, errorResponse); .e (TAG, "onFailure:" + errorResponse););
Wie Sie sehen, können Sie mit der Taste alle erforderlichen API-Anforderungsparameter-Schlüssel hinzufügen RequestParams
Instanz (in diesem Fall nur die vom Benutzer eingegebene Abfrage). Diese Version des erhalten()
Methode gibt ein JSON-Objekt an zurück onSuccess
, Es gibt jedoch andere Varianten, die auf Ihre Bedürfnisse zugeschnitten sind. (Benutzen Strg + O
um die anderen Versionen dieser Methode zu sehen.)
Dies ist alles, was Sie tun müssen, um einen Loopj-Client zu implementieren, um HTTP-Aufrufe an einen Webdienst durchzuführen. In unserem Fall möchten wir unsere Anfrage senden, wenn der Benutzer auf die Schaltfläche "Suchen" klickt. Also wieder rein Hauptaktivität
, Eine Instanz von erstellen MyLoopjTask
und drinnen onClick
Anruf LoopjCall ausführen
mit dem vom Benutzer eingegebenen Begriff. Hauptaktivität
wird wie folgt aussehen.
public class MainActivity erweitert AppCompatActivity implementiert View.OnClickListener EditText etSearchTerms; Schaltfläche btnSearch; TextView tvSearchResults; MyLoopjTask myLoopjTask; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); etSearchTerms = (EditText) findViewById (R.id.etSearchTerms); btnSearch = (Button) findViewById (R.id.btnSearch); tvSearchResults = (TextView) findViewById (R.id.tvSearchResults); btnSearch.setOnClickListener (this); myLoopjTask = new MyLoopjTask (); @Override public void onClick (View v) String searchTerm = etSearchTerms.getText (). ToString (); etSearchTerms.setText (""); // make loopj http call myLoopjTask.executeLoopjCall (searchTerm);
Wenn Sie nun die App ausführen, sollten Sie die Ergebnisse Ihrer Anfrage im Protokollfenster sehen.
Durch die Trennung von asynchronen Vorgängen in dedizierte Klassen bleibt der Code sauber. Dies bedeutet jedoch, dass wir keinen direkten Zugriff auf Benutzeroberflächenelemente haben. Um die Ergebnisse dieser Anforderungen anzuzeigen, empfehle ich die Erstellung einer Listener-Schnittstelle. Dies ist eine gängige Strategie, die zum Beispiel in dieser Stack Overflow-Frage behandelt wird. Es hat drei einfache Schritte.
Erstellen Sie zunächst eine Schnittstelle mit einer einzelnen Methode, die aufgerufen wird, wenn die Ergebnisse der HTTP-Anforderung von Loopj abgerufen werden.
öffentliche Schnittstelle OnLoopjCompleted public void taskCompleted (String-Ergebnisse);
Im MyLoopjTask
, Ändern Sie den Konstruktor so, dass a benötigt wird Kontext
und ein OnLoopjCompleted
Instanz als Parameter.
public MyLoopjTask (Kontext-Kontext, OnLoopjCompleted-Listener) asyncHttpClient = new AsyncHttpClient (); requestParams = new RequestParams (); this.context = Kontext; this.loopjListener = Listener;
Nun, wenn die Anforderungsergebnisse in verfügbar sind MyLoopjTask
, übergeben Sie sie an die Methode der Listener-Schnittstelle.
@Override public void onSuccess (int statusCode, Header [] - Header, JSONObject-Antwort) super.onSuccess (statusCode, Header, Antwort); jsonResponse = response.toString (); loopjListener.taskCompleted (jsonResponse); Log.i (TAG, "onSuccess:" + jsonResponse);
Nehmen Sie schließlich die Aktivität vor, die Sie in diesem Fall aktualisieren möchten Hauptaktivität
-implementieren OnLoopjCompleted
. Aktualisieren Sie die Initialisierung von myLoopjTask
zu myLoopjTask = new MyLoopjTask (this, this);
.
Da setzt deine Aktivität jetzt um OnLoopjCompleted
, Android Studio zwingt Sie zur Implementierung der Methode Aufgabe erledigt
. Dort können Sie die Benutzeroberfläche mit den neuen Daten aktualisieren.
@Override public void taskCompleted (String-Ergebnisse) tvSearchResults.setText (results);
Hier hast du es. Wenn Sie die App ausführen, werden dem Benutzer alle Daten Ihrer asynchronen HTTP-Anforderung angezeigt. Natürlich müssen Sie die empfangenen JSON-Daten analysieren, um nur die benötigten Teile zu extrahieren. Sie können beispielsweise das Filmposter anzeigen, indem Sie die URL des Posterbilds an Picasso übergeben.
In diesem Lernprogramm haben Sie gesehen, wie Sie mit Loopj, einer Bibliothek, asynchrone HTTP-Anforderungen in Android ausführen können. Loopj ist mit nur wenigen Codezeilen einfach zu bedienen. Jetzt haben Sie keine Entschuldigung mehr, um Ihre App nicht mit den Inhalten Ihres bevorzugten Web-Services auf dem neuesten Stand zu halten!