[JAVA] Android-Entwicklung - WEB-Zugriff (GET) Versuchen Sie, Daten durch Kommunikation mit der Außenwelt abzurufen. ~

Einführung

Hallo. Ich bin Wataku, ein serverseitiger Programmierer, der an einer bestimmten Schule Programmieren studiert. : entspannt: Lassen Sie uns auch dieses Mal Android entwickeln. Dieses Mal möchte ich mich mit Android mit einem externen Netzwerk verbinden und Daten erfassen.

Zielperson

Webzugriffsübersicht

  1. Schreiben Sie den Quellcode für den http-Zugriff in die App. → Die meisten Antwortinhalte sind JSON oder XML.
  2. Verwenden Sie die Bildschirmkomponente WebView auf dem Bildschirm. → Der Inhalt der Antwort ist grundsätzlich HTML.

Asynchrone Verarbeitung

Bei Dingen, deren Verarbeitung lange dauert, wie z. B. dem Webzugriff, und bei Dingen, die wahrscheinlich unerwartete Fehler verursachen, wird die Verarbeitung (asynchrone Verarbeitung) in einem von der Hauptverarbeitung getrennten Thread ausgeführt. AsyncTask Bei der asynchronen Verarbeitung von Android ist es praktisch, die AsyucTask-Klasse bei der Interaktion mit dem UI-Thread zu verwenden.

1. Verwendung von AsyncTask

  1. Erstellen Sie eine Klasse, die * Asynuc Task erbt. * * → Es ist praktisch, es als private Mitgliedsklasse der Aktivitätsklasse zu erstellen.

    • Beschreiben Sie den Prozess, den Sie asynchron in der Methode doInBackground () ausführen möchten. * * → Diese Methode ist eine abstrakte Methode von Asyuc Task und muss daher überschrieben werden.
    • Neu diese Klasse in der Aktivität und führen Sie die Methode execute () aus *
Der Klassenname der privaten Klasse erweitert AsyucTask< ... > {
  ...
  @Override
  public String doInBackground( String ... params ) {    
     //Beschreiben Sie hier die asynchrone Verarbeitung
  }
}
danach
Klassenname Variablenname=neuer Klassenname(); 
Variablennamen.execute( ... );

2. Andere Methoden

Zusätzlich zu doInBackground () verfügt AsyucTask über die folgenden Methoden. Da diese Methoden im UI-Thread ausgeführt werden, ist es möglich, Bildschirmteile zu bedienen.

Wenn cancel () von der Aktivität aufgerufen wird, wird onCancelled () ausgeführt, nachdem doInBackground () abgeschlossen ist.

3. Generika

Wenn Sie eine untergeordnete Klasse von AsyucTask erstellen, müssen Sie drei Typen in die Generika schreiben. → * Beschreiben Sie die Leere für diejenigen, für die keine Typspezifikation erforderlich ist. * *

...Der Klassenname erweitert AsyucTask<①String, ②Void, ③String> {

①Params

execute () .doInBackground () Argumenttyp. → Das Argument von execute () wird wie das Argument von doInBackground () übergeben.

②Progress

PublishProgress (). Der Argumenttyp für onProgressUpdate (). → Das Argument von PublishProgress () wird wie das Argument von onProgressUpdate () übergeben.

③Result

Der Rückgabewert von doInBackground () und der Typ des Arguments von onPostExecute (). OnCanceled (). → Der Rückgabewert von doInBackground () wird als Argument von onPostExecute () und onCanceled () übergeben.

http-Zugriff

Geben Sie die Erlaubnis zur Internetverbindung

src/main/AndroidManifest.xml


<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Mit dem Internet verbinden

Verwenden Sie das Objekt ** HttpURLConnection **.

Legen Sie die URL-Zeichenfolge fest.

URL url = new URL("URL-Zeichenfolge");

Stellen Sie eine Verbindung her

con = (HttpURLConnection) url.openConnection();

Sie können das HttpURLConnection-Objekt (Verbindung) abrufen, indem Sie die Methode ** URL # openConnection () ** für das URL-Objekt ausführen, das die URL-Informationen zum Zugriffsziel enthält.

Zugriff auf Methodeneinstellungen

Verwenden Sie ** setRequestMethod () **.

con.setRequestMethod("GET")

Eigentlich Internetverbindung

Verwenden Sie ** URLConnection # connect () **.

con.connect();

Trennung

Verwenden Sie ** connect () **. Nach Abschluss der Verarbeitung muss die Verbindung explizit getrennt werden, um keine unnötige Verbindung zu hinterlassen.

con.disconnect()

Beispielcode für http-Anfrage

Der Klassenname der privaten Klasse erweitert AsyncTask<String, Void, String> {
        private static final String DEBUG_TAG = "Etikett";

        @Override
        public String doInBackground(String... params) {
            String urlStr = params[0];
            String id = params[1];

            HttpURLConnection con = null;
            InputStream is = null;
            String result = "";

            try {
                URL url = new URL(urlStr);
                con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("GET");
                con.connect();
                is = con.getInputStream();

                result = is2String(is);
            }
            catch(MalformedURLException ex) {
                Log.e(DEBUG_TAG, "Fehler bei der URL-Konvertierung", ex);
            }
            catch(IOException ex) {
                Log.e(DEBUG_TAG, "Kommunikationsfehler", ex);
            }
            finally {
                if (con != null) {
                    con.disconnect();
                }
                if (is != null) {
                    try {
                        is.close();
                    }
                    catch (IOException ex) {
                        Log.e(DEBUG_TAG, "Fehler bei der Freigabe des Eingabestreams", ex);
                    }
                }
            }
            return result;
        }

        private String is2String(InputStream is) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            StringBuffer sb = new StringBuffer();
            char[] b = new char[1024];
            int line;
            while(0 <= (line = reader.read(b))) {
                sb.append(b, 0, line);
            }
            return sb.toString();
        }
}

*** InputStream ** ist eine Klasse zum Lesen von Bytes.

Umgang mit JSON

Verwenden Sie die Klasse ** JSONObject **. Geben Sie als Argument "JSON-Zeichenfolge" an.

Rufen Sie danach, während Sie die folgenden Operationen ausführen, das Ziel-JSONObject ab und rufen Sie den Wert mit getString (...) ab.

--GetJSONObject (...), um das JSONObject direkt darunter abzurufen --GetJSONArray (...), um das JSONArray direkt darunter zu erhalten --GetJSONObject (...), um das angegebene JSONObject von JSONArray abzurufen

Beispielcode für die JSON-Verarbeitung

Der Klassenname der privaten Klasse erweitert AsyncTask<String, Void, String> {


 @Override
 public void onPostExecute(String result) {
            String title = "";
            String text = "";
            String dateLabel = "";
            String telop = "";
            try {
                JSONObject rootJSON = new JSONObject(result);
                title = rootJSON.getString("title");
                JSONObject descriptionJSON = rootJSON.getJSONObject("description");
                text = descriptionJSON.getString("text");
                JSONArray forecasts = rootJSON.getJSONArray("forecasts");
                JSONObject forecastNow = forecasts.getJSONObject(0);
                dateLabel = forecastNow.getString("dateLabel");
                telop = forecastNow.getString("telop");
            }
            catch(JSONException ex) {
                Log.e(DEBUG_TAG, "JSON-Analyse fehlgeschlagen", ex);
            }

   }
}

das ist alles. Wenn Sie Vorschläge wie etwas falsches haben, kontaktieren Sie uns bitte. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Android-Entwicklung - WEB-Zugriff (GET) Versuchen Sie, Daten durch Kommunikation mit der Außenwelt abzurufen. ~
Android Development-WEB Access (POST) Versuchen Sie, mit der Außenwelt zu kommunizieren und Daten zu senden. ~
Versuchen Sie, den API-Schlüssel von Redmine mit Ruby zu erhalten
Holen Sie sich Daten mit der API, die mit dem Befehl curl erstellt wurde
Versuchen Sie, das gemeinsame Layout mit Schienen zusammenzufassen
Speichern Sie die Daten, die von JavaFX gelesen werden können, als PNG
Zurück zum Anfang und erste Schritte mit Java ① Datentypen und Zugriffsmodifikatoren
Ich habe versucht, mit Spring Data JPA zu beginnen
[Android] So erhalten Sie die Einstellungssprache des Terminals
Greifen Sie mit Get on Android auf die Web-API zu und verarbeiten Sie Json (vorerst Java).
So machen Sie einen Screenshot mit dem Android Studio-Emulator
[MT] Geben Sie die Artikelkategorie von Android mit Daten-API an
So erhalten Sie Werte in Echtzeit mit TextWatcher (Android)
[MT] Geben Sie die Artikelkategorie von Android mit Daten-API an
Jetzt ist es an der Zeit, mit der Stream-API zu beginnen
Lesen Sie die Daten der Shizuoka Prefecture Point Cloud DB mit Java und versuchen Sie, die Baumhöhe zu ermitteln.
Versuchen Sie, die Idee eines zweidimensionalen Arrays mit einem eindimensionalen Array nachzuahmen
Auf Anforderung wird der Zugriff auf die Ressource beim Push mit Docker verweigert
Führen Sie logstash mit Docker aus und versuchen Sie, Daten in Elastic Cloud hochzuladen
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen