Je suis un débutant dans le développement d'applications Android qui a écrit cet article l'autre jour. Prenez note de ce que vous avez appris aujourd'hui.
Cet article a été écrit par des débutants pour noter ce qu'ils ont appris. Il y a de fortes chances qu'il s'écarte du mode de mise en œuvre ou du bon sens, alors soyez prudent lorsque vous l'utilisez comme référence pour l'implémentation, ou vous devriez vous arrêter à vos risques et périls.
-Il semble préférable d'utiliser HttpUrlConnection pour envoyer des requêtes HTTP / GET à partir d'applications Android maintenant-> référence )
-La communication HTTP doit être implémentée de manière asynchrone dans les applications Android. Il est nécessaire de communiquer avec un thread différent du thread qui exécute l'application elle-même.
・ C'est le thread principal qui perturbe l'interface utilisateur de l'application, et le thread principal ne peut pas être falsifié à partir d'un autre thread (l'interface utilisateur ne peut pas être falsifiée) -> Il y a un appareil
Je trébuche de différentes manières, mais étudie en codant pas à pas!
La destination pour envoyer la requête cette fois est PHP implémenté par moi-même sur le serveur que j'ai créé, et c'est un programme qui renvoie le résultat avec json de manière appropriée pour une requête GET appropriée. Cet article n'aborde pas cela, ni ne décrit sa mise en œuvre. Écrivons-le séparément.
Avec une telle interface utilisateur, faites une demande avec GET à l'URI entré dans le editText supérieur, et lorsque le résultat est obtenu, écrivez le corps de la réponse dans le editText inférieur.
"Request URL" est juste un TextView. Mettez-le simplement. J'ai écrit cet article maintenant, mais ce n'est pas une URL mais un URI, mais peu importe lequel
L'écart entre ceci et le bouton écrit comme GET est editTextUrl. Je vais essayer de faire une demande GET pour cette URL (URI). Le bouton GET n'est qu'un bouton. Exécutez la méthode avec onClick. En dessous, editTextResponse est un espace pour afficher le résultat obtenu par la requête. La prochaine fois, mettons un en-tête séparément du corps de la réponse. Secrètement, il y a un petit textViewTime en bas. Mesurez le temps qu'il a fallu pour obtenir la demande et essayez de la générer.
J'ai donc écrit le code suivant.
MainActivity.java
package com.example.hogehogehoge.testapp11;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
TextView textViewUrl;
EditText editTextUrl;
Button buttonGet;
EditText editTextResponse;
TextView textViewTime;
long startTime;
long endTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewUrl = (TextView)findViewById(R.id.textViewUrl);
textViewTime = (TextView)findViewById(R.id.textViewTime);
editTextUrl = (EditText)findViewById(R.id.editTextUrl);
buttonGet = (Button)findViewById(R.id.buttonGet);
textViewTime = (TextView)findViewById(R.id.textViewTime);
editTextResponse = (EditText)findViewById(R.id.editTextResponse);
editTextUrl.setText("http://Mon serveur de test/get.php?target=test");
}
//Pour vérifier le fonctionnement du bouton, cliquez sur
public void onButtonGetTest(View view) {
Toast.makeText(this,"click test",Toast.LENGTH_SHORT).show();
}
public void onButtonGet(View view) {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(editTextUrl.getText().toString());
//Heure de début du traitement
startTime = System.currentTimeMillis();
HttpURLConnection con = (HttpURLConnection)url.openConnection();
final String str = InputStreamToString(con.getInputStream());
//Heure de fin du traitement
endTime = System.currentTimeMillis();
Log.d("HTTP", str);
runOnUiThread(new Runnable() {
@Override
public void run() {
editTextResponse.setText(String.valueOf(str));
textViewTime.setText("temps de traitement:" + (endTime - startTime) + "ms");
}
});
} catch (Exception ex) {
System.out.println(ex);
}
}
}).start();
}
// InputStream -> String
static String InputStreamToString(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
return sb.toString();
}
}
Communication HTTP (requête GET) sur Android Faire fonctionner l'interface utilisateur du thread principal de l'application à partir d'un autre thread
Lorsque l'application démarre, onCreate est exécuté et
editTextUrl.setText("http://Mon serveur de test/get.php?target=test");
Est exécuté et tout URI est défini dans editTextUrl. Puisqu'il s'agit de editText, vous pouvez bien sûr jouer avec vous-même depuis l'application.
Lorsque vous appuyez sur le bouton GET, la méthode onButtonGet définie dans la propriété onClick est exécutée. Créez un nouveau thread, créez un objet URL dans celui-ci et exécutez HttpUrlConnection à l'aide de l'objet URL généré. Le résultat obtenu est stocké dans str. Si vous le faites, utilisez la méthode InputStreamToString que vous avez définie. (Reportez-vous à la page de référence) En outre, le temps est mesuré à partir de l'exécution de cette HttpUrlConnection jusqu'au point où le résultat est stocké dans str comme temps de traitement (je me demande si cela est correct, dans ce cas). Une fois, essayez de sortir le résultat obtenu sur la console en utilisant Log.d.
Après cela, appelez une méthode pratique appelée runOnUiThread qui peut faire fonctionner l'interface utilisateur sur le thread principal et définir la réponse obtenue et le temps mesuré dans l'interface utilisateur.
La méthode InputStreamToString est une copie. En regardant le contenu, c'est comme vérifier ce qui se trouve dans Input (le contenu de la réponse) ligne par ligne et continuer à ajouter à la valeur de retour jusqu'à ce qu'elle soit vide. Je peux comprendre cela d'une manière ou d'une autre.
En passant, dans cette API, si vous mettez test dans la requête cible et que vous le demandez, vous obtiendrez la réponse suivante (json).
{"status":"true","res":"GET test success","explain":"GET test successed"}
Il n'y a pas de sens profond. Je viens de l'implémenter moi-même.
Lancez l'appli
Ouaip. Comme prévu, commencez avec un URI arbitraire (onCreate codé en dur) inséré. Lorsque vous appuyez sur le bouton GET pour l'exécuter.
Probablement parce que la partie du temps de traitement est devenue importante, la partie d'affichage des résultats a été mal alignée sur la droite www
C'est tout pour aujourd'hui (´ ・ ω ・ `)
Recommended Posts