Loopj est une bibliothèque Android permettant de faire des requêtes HTTP asynchrones. Je l'aime pour sa facilité d'utilisation et sa simplicité. Créé par James Smith, il est également connu sous le nom de "Client HTTP asynchrone Android", et il est utilisé par des entreprises comme Instagram, Pinterest et bien d'autres. C'est un bon point d'entrée dans le monde des bibliothèques HTTP et vous aidera à comprendre très facilement des concepts importants..
Pour apprendre à utiliser cette bibliothèque, nous allons créer MovieTrivia, une application simple qui se connecte à un service Web pour récupérer des informations sur les films ou les émissions de télévision et affiche ces informations à l'utilisateur..
Pour commencer, créez un nouveau projet Android Studio, avec une activité vide. Pour inclure Loopj, copiez la dépendance sur le site officiel. Vous pouvez trouver la dépendance dans la section "Installation et utilisation de base" du site web (ou simplement copier la chaîne ci-dessous).
compiler 'com.loopj.android:android-async-http:1.4.9'
Le message "Sync Now" apparaîtra dans le coin supérieur droit. Cliquez dessus pour que Gradle télécharge la bibliothèque et la mette à la disposition de votre projet..
Parce que l'application va se connecter à Internet, nous devons déclarer la permission appropriée pour que l'utilisateur l'autorise. Ouvrez votre AndroidManifest.xml
déposer et, juste avant le application
tag, écris:
Vous êtes maintenant prêt à utiliser Loopj dans votre application..
Nous allons créer l'interface utilisateur la plus simple possible: juste un Champ de texte
entrer un terme de recherche, un Bouton
faire la recherche, et un Affichage
pour montrer les résultats. Ouvrir activity_mail.xml
et ajoutez les composants d'interface utilisateur requis comme indiqué ci-dessous.
Maintenant, comme d'habitude, connectez ces composants à votre MainActivity.java
.
Classe publique MainActivity (extension de classe) Etend AppCompatActivity implémente View.OnClickListener EditText etSearchTerms; Bouton btnSearch; TextView tvSearchResults; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); etSearchTerms = (EditText) findViewById (R.id.etSearchTerms); btnSearch = (bouton) findViewById (R.id.btnSearch); tvSearchResults = (TextView) findViewById (R.id.tvSearchResults); btnSearch.setOnClickListener (this); @Override public void onClick (Affichage v) String searchTerm = etSearchTerms.getText (). ToString (); etSearchTerms.setText (""); // faire l'appel HTTP Loopj
Pour garder votre code propre et organisé, créez une classe Java distincte., MyLoopjTask.java
, contenir tout le code et les opérations spécifiques à Loopj. Vous aurez besoin de deux variables d'instance, une de type RequestParams
pour construire les détails de recherche dans l'URL, et un autre de type AsyncHttpClient
pour réellement faire les requêtes HTTP. Avant d'aller plus loin, vérifiez qu'Android Studio a ajouté ces importations nécessaires.
import org.json.JSONObject; importer cz.msebera.android.httpclient.Header;
Créez également une méthode qui prend la requête de l’utilisateur comme argument: c’est là que le travail réel sera effectué..
Classe publique MyLoopjTask final statique privé String TAG = "MOVIE_TRIVIA"; AsyncHttpClient asyncHttpClient; RequestParams requestParams; String BASE_URL = "http://www.omdbapi.com/?"; String jsonResponse; public MyLoopjTask () asyncHttpClient = new AsyncHttpClient (); requestParams = new RequestParams (); public vo execute executeLoopjCall (String queryTerm) requestParams.put ("s", queryTerm); asyncHttpClient.get (BASE_URL, requestParams, nouveaux en-têtes JsonHttpResponseHandler () ) @Override public voSuccess (int statusCode, en-têtes [], réponse JSONObject); Log.i (TAG, "onSuccess:" + jsonResponse); @Override public void onFailure (int statusCode, en-têtes [], Throwable jable, JSONObject errorResponse) super.onFailure (statusCode, headers, jetable, errorResponse); Log .e (TAG, "onFailure:" + errorResponse););
Comme vous le voyez, vous pouvez ajouter toutes les clés de paramètres de requête d’API nécessaires avec RequestParams
exemple (dans ce cas, il s’agit uniquement de la requête entrée par l’utilisateur). Cette version du obtenir()
La méthode retourne un objet JSON à onSuccès
, mais il existe d'autres variantes disponibles pour répondre à vos besoins. (Utilisation Ctrl + O
pour voir les autres versions de cette méthode.)
C’est tout ce dont vous avez besoin pour implémenter un client Loopj afin d’appeler HTTP à un service Web. Dans notre cas, nous souhaitons envoyer notre demande lorsque l'utilisateur clique sur le bouton "Rechercher". Donc, retour dans Activité principale
, créer une instance de MyLoopjTask
et à l'intérieur sur clic
appel executeLoopjCall
avec le terme entré par l'utilisateur. Activité principale
ressemblera à ceci.
Classe publique MainActivity (extension de classe) Etend AppCompatActivity implémente View.OnClickListener EditText etSearchTerms; Bouton 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 = (bouton) findViewById (R.id.btnSearch); tvSearchResults = (TextView) findViewById (R.id.tvSearchResults); btnSearch.setOnClickListener (this); myLoopjTask = new MyLoopjTask (); @Override public void onClick (Affichage v) String searchTerm = etSearchTerms.getText (). ToString (); etSearchTerms.setText (""); // make loopj http call myLoopjTask.executeLoopjCall (searchTerm);
Maintenant, si vous exécutez l'application, vous devriez voir les résultats de votre demande dans la fenêtre du journal..
La séparation des opérations asynchrones en classes dédiées permet de garder notre code propre, mais cela signifie que nous n'avons pas directement accès aux éléments de l'interface utilisateur. Pour afficher les résultats de ces demandes, je vous recommande de créer une interface d'écoute. Il s'agit d'une stratégie commune, décrite par exemple dans cette question de dépassement de capacité. Il a trois étapes faciles.
Commencez par créer une interface avec une seule méthode qui sera appelée lorsque les résultats de la requête HTTP seront obtenus de Loopj..
interface publique OnLoopjCompleted public void taskCompleted (résultats de chaîne);
Dans MyLoopjTask
, modifier le constructeur de sorte qu'il faut un Le contexte
Et un OnLoopjCompleted
instance en tant que paramètres.
public MyLoopjTask (contexte de contexte, écouteur OnLoopjCompleted) asyncHttpClient = new AsyncHttpClient (); requestParams = new RequestParams (); this.context = context; this.loopjListener = auditeur;
Maintenant, lorsque les résultats de la demande sont disponibles dans MyLoopjTask
, passe-les à la méthode de l'interface d'écoute.
@Override public void onSuccess (int statusCode, en-têtes d'en-tête [], réponse JSONObject) super.onSuccess (statusCode, en-têtes, réponse); jsonResponse = response.toString (); loopjListener.taskCompleted (jsonResponse); Log.i (TAG, "onSuccess:" + jsonResponse);
Enfin, effectuez l'activité que vous souhaitez mettre à jour - dans ce cas Activité principale
-mettre en place OnLoopjCompleted
. Mettre à jour l'initialisation de myLoopjTask
à myLoopjTask = new MyLoopjTask (ceci, cela);
.
Depuis que votre activité implémente maintenant OnLoopjCompleted
, Android Studio va vous obliger à mettre en œuvre la méthode tâche terminée
. Là, vous pouvez mettre à jour l'interface utilisateur avec les nouvelles données.
@Override public void taskCompleted (Résultats de la chaîne) tvSearchResults.setText (results);
Voilà. Lorsque vous exécutez l'application, toutes les données de votre requête HTTP asynchrone seront affichées à l'utilisateur. Naturellement, vous voudrez analyser les données JSON reçues pour extraire uniquement les éléments dont vous avez besoin. Par exemple, vous pouvez afficher l'affiche du film en transmettant l'URL de l'image de l'affiche à Picasso..
Dans ce tutoriel, vous avez vu comment utiliser Loopj, une bibliothèque permettant de réaliser des requêtes HTTP asynchrones sous Android. Loopj est facile à utiliser avec seulement quelques lignes de code. Désormais, vous n'avez plus aucune excuse pour ne pas tenir votre application à jour avec le contenu de votre service Web préféré.!