Ich bin ein Anfänger in der Entwicklung von Android-Anwendungen, der neulich diesen Artikel geschrieben hat. Notieren Sie sich, was Sie heute gelernt haben.
Dieser Artikel wurde von Anfängern geschrieben, um zu notieren, was sie gelernt haben. Es besteht eine hohe Wahrscheinlichkeit, dass es von der Art der Implementierung oder dem gesunden Menschenverstand abweicht. Seien Sie also vorsichtig, wenn Sie es als Referenz für die Implementierung verwenden, oder Sie sollten auf eigenes Risiko aufhören.
-Es scheint besser zu sein, HttpUrlConnection zu verwenden, um jetzt HTTP / GET-Anforderungen von Android-Apps zu senden-> Referenz )
-HTTP-Kommunikation muss in Android-Apps asynchron implementiert werden. Es ist erforderlich, mit einem anderen Thread als dem Thread zu kommunizieren, in dem die Anwendung selbst ausgeführt wird.
・ Es ist der Haupt-Thread, der mit der Benutzeroberfläche der App in Konflikt gerät, und der Haupt-Thread kann nicht von einem anderen Thread manipuliert werden (die Benutzeroberfläche kann nicht manipuliert werden) -> Es gibt ein Gerät
Ich stolpere auf verschiedene Arten, aber lerne, während ich Schritt für Schritt codiere!
Das Ziel, um die Anfrage dieses Mal zu senden, ist PHP, das von mir auf dem von mir erstellten Server implementiert wurde, und es ist ein Programm, das das Ergebnis mit json für eine entsprechende GET-Anfrage entsprechend zurückgibt. Dieser Artikel geht weder darauf ein, noch beschreibt er seine Implementierung. Lassen Sie es uns separat schreiben.
Stellen Sie mit einer solchen Benutzeroberfläche eine Anforderung mit GET an den im oberen editText eingegebenen URI, und schreiben Sie den Antworttext in den unteren editText, wenn das Ergebnis erhalten wird.
"URL anfordern" ist nur eine Textansicht. Einfach gesagt. Ich habe diesen Artikel jetzt geschrieben, aber dies ist keine URL, sondern eine URI, aber es spielt keine Rolle, welche
Die Lücke zwischen dieser und der als GET geschriebenen Schaltfläche ist editTextUrl. Ich werde versuchen, eine GET-Anfrage für diese URL (URI) zu stellen. Die GET-Taste ist nur eine Taste. Führen Sie die Methode mit onClick aus. Darunter ist editTextResponse ein Leerzeichen, um das von der Anforderung erhaltene Ergebnis anzuzeigen. Lassen Sie uns das nächste Mal einen Header getrennt vom Antworttext ausgeben. Insgeheim befindet sich unten eine kleine textViewTime. Messen Sie die Zeit, die zum Abrufen der Anforderung benötigt wurde, und versuchen Sie, sie auszugeben.
Also habe ich den folgenden Code geschrieben.
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://Mein Testserver/get.php?target=test");
}
//Zum Überprüfen der Funktion der Schaltfläche klicken
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());
//Startzeit der Verarbeitung
startTime = System.currentTimeMillis();
HttpURLConnection con = (HttpURLConnection)url.openConnection();
final String str = InputStreamToString(con.getInputStream());
//Endzeit verarbeiten
endTime = System.currentTimeMillis();
Log.d("HTTP", str);
runOnUiThread(new Runnable() {
@Override
public void run() {
editTextResponse.setText(String.valueOf(str));
textViewTime.setText("Verarbeitungszeit:" + (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();
}
}
HTTP-Kommunikation (GET-Anforderung) unter Android Bedienen Sie die Benutzeroberfläche des Hauptthreads der Anwendung von einem anderen Thread aus
Wenn die App gestartet wird, wird onCreate ausgeführt und darin
editTextUrl.setText("http://Mein Testserver/get.php?target=test");
Wird ausgeführt und jeder URI wird in editTextUrl festgelegt. Da es sich um editText handelt, können Sie natürlich selbst über die App damit spielen.
Wenn die GET-Taste gedrückt wird, wird die in der onClick-Eigenschaft definierte onButtonGet-Methode ausgeführt. Erstellen Sie einen neuen Thread, erstellen Sie ein URL-Objekt darin und führen Sie HttpUrlConnection mit dem generierten URL-Objekt aus. Das erhaltene Ergebnis wird in str gespeichert. Verwenden Sie in diesem Fall die von Ihnen definierte InputStreamToString-Methode. (Siehe Referenzseite) Außerdem wird die Zeit von der Ausführung dieser HttpUrlConnection bis zu dem Punkt gemessen, an dem das Ergebnis als Verarbeitungszeit in str gespeichert wird (ich frage mich, ob dies in diesem Fall in Ordnung ist). Versuchen Sie einmal, das erhaltene Ergebnis mit Log.d an die Konsole auszugeben.
Rufen Sie danach eine praktische Methode namens runOnUiThread auf, mit der die Benutzeroberfläche im Hauptthread ausgeführt werden kann, und legen Sie die erhaltene Antwort und die gemessene Zeit in der Benutzeroberfläche fest.
Die InputStreamToString-Methode ist eine Kopie. Wenn Sie sich den Inhalt ansehen, überprüfen Sie zeilenweise, was in der Eingabe (dem Inhalt der Antwort) enthalten ist, und hängen Sie den Rückgabewert an, bis er leer ist. Ich kann das irgendwie verstehen.
Übrigens erhalten Sie in dieser API die folgende Antwort (json), wenn Sie einen Test in die Zielabfrage einfügen und diese anfordern.
{"status":"true","res":"GET test success","explain":"GET test successed"}
Es gibt keine tiefe Bedeutung. Ich habe es einfach selbst implementiert.
Starten Sie die App
Jep. Beginnen Sie wie erwartet mit einem beliebigen (fest codierten onCreate) URI. Wenn Sie die GET-Taste drücken, um es auszuführen.
Wahrscheinlich, weil der Teil der Verarbeitungszeit groß wurde, war der Teil der Ergebnisanzeige falsch rechts ausgerichtet. Www
Das ist alles für heute (´ ・ ω ・ `)
Recommended Posts