Web-Abfragen mit Android [] (Web-Abfragen mit Android), Lektion, Seite 722755
https://www.purl.org/stefan_ram/pub/web-abfragen_android (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Android-Entwicklung

Web-Abfragen mit Android 

Vorbereitung des Gerätes

Falls ein Emulator (beispielsweise »\android-sdk-windows\tools\emulator-arm.exe«) verwendet wird, so ist dieser nötigenfalls in der Firewall des umgebenden Systems freizugeben.

In jedem Falls sollte zunächst erst einmal überprüft werden, ob das Gerät überhaupt Internet-Zugang hat.

Festlegen der nötigen Berechtigungen

Die Berechtigungen zum Zugriff auf das Internet  ist in der Datei »ApplicationManifest.xml« einzutragen. Dies wird bei neueren Android -Versionen aber wohl nicht mehr benötigt

in »ApplicationManifest.xml«
<uses-permission android:name="android.permission.INTERNET"/> 
URI
http://developer.android.com/reference/android/Manifest.permission.html

Festlegen der nötigen Berechtigungen

Für Web-Zugriffe können die normalen Java-SE -Klassen verwendet werden.

Wohl ab API-Level 11 dürfen Web-Abfragen wohl nicht mehr auf dem UI-Thread  stattfinden. Daher erzeugen wir unten mit »new Task().execute« einen neuen Verlauf (englisch “thread ”) und starten diesen. Nach dem Start des Verlaufs, wird von diesem die Methode »doInBackground« mit den Argumenten von »execute« aufgerufen.

»doInBackground« läuft dann nicht  auf dem UI-Thread.

»onPostExecute« läuft jedoch auf dem UI-Thread  und kann so Informationen ausgeben.

(Zwei weitere Verben, die wir hier nicht verwenden sind »onPreExecute« zum Vorbereiten einer Ausgabe auf dem UI-Thread  und »onProgressUpdate« zum Aktualisieren einer Ausgabe auf dem UI-Thread.)

In der Implementation von »doInBackground« lesen wir eine Webseite bei der als Argument übergebenen URI ein und geben diese als Zeichenfolge zurück. Dies erfolgt in »onPostExecute«, welches das Ergebnis von »doInBackground« als Argument erhält.

MainActivity.java

package com.example;

public class MainActivity extends android.app.Activity
{

class Task extends android.os.AsyncTask
< java.lang.String, java.lang.Integer, java.lang.String >
{

protected java.lang.String doInBackground
( final java.lang.String ... varargs ){ try
{ final java.lang.StringBuilder builder
= new java.lang.StringBuilder();
java.net.URL url = new java.net.URL( varargs[ 0 ]);
final java.net.HttpURLConnection connection =
( java.net.HttpURLConnection )url.openConnection();
connection.setConnectTimeout( 8000 );
connection.setReadTimeout( 8000 );
final java.io.InputStream stream = connection.getInputStream();
final int code = connection.getResponseCode(); if
( code == java.net.HttpURLConnection.HTTP_OK )
{ final java.io.BufferedReader input
= new java.io.BufferedReader
( new java.io.InputStreamReader( stream ), 8192 );
java.lang.String line;
while(( line = input.readLine() )!= null )
builder.append( line );
input.close(); }
return builder.toString(); }

catch( final java.lang.Exception exception )
{ return java.lang.String.valueOf( exception ); }}

protected void onPostExecute( final java.lang.String result )
{ android.util.Log.i( result ); }}

public void onCreate( final android.os.Bundle bundle )
{ super.onCreate( bundle );
new Task().execute( "http://www.example.com/" ); }}

Ausgabe ohne Internet-Verbindung:
java.net.SocketTimeoutException: failed to connect to www.example.com/93.184.216.119 (port 80) after 8000ms
Ausgabe mit Internet-Verbindung (auf die Debug-Konsole):
<!doctype html><html><head> <title>Example Domain

Senden vor Formulardaten

Das folgende Fragement zeigt, wie unter Java SE  Formulardaten verschickt werden können. Dieselbe Vorgehensweise kann auch unter Android  eingesetzt werden.

Posten von Formulardaten (ungetestet, für Java SE )
class Main 
{ public static void main( final java.lang.String[] args ) throws Exception
{ java.net.URL url = new java.net.URL( "http://www.example.com/post.php" );
java.util.Map< java.lang.String, java.lang.Object >map = new LinkedHashMap<>();
map.put( "name", "James" );
map.put( "email", "james@example.com" );
java.lang.StringBuilder builder = new java.lang.StringBuilder();
for( java.util.Map.Entry< java.lang.String, java.lang.Object >entry : map.entrySet() )
{ if( builder.length() > 0 )builder.append( '&' );
builder.append( java.net.URLEncoder.encode( param.getKey(), "UTF-8" ));
builder.append('=');
builder.append( URLEncoder.encode( String.valueOf( param.getValue() ), "UTF-8" )); }
final byte[] bytes = builder.toString().getBytes( "UTF-8" );
final HttpURLConnection connection =( java.net.HttpURLConnection )url.openConnection();
connection.setRequestMethod( "POST" );
connection.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded" );
connection.setRequestProperty( "Content-Length", java.lang.String.valueOf( bytes.length ));
connection.setDoOutput( true );
connection.getOutputStream().write( bytes );
final java.io.Reader reader = new BufferedReader
( new java.io.InputStreamReader( connection.getInputStream(), "UTF-8" ));
for( int ch;( ch = in.read() )>= 0; java.lang.System.out.print(( char )ch )); }}

Übungsaufgaben

/   Übungsaufgabe

Überarbeiten Sie das erste Programm so, daß die Ausgabe nicht auf der Debug-Konsole, sondern auf dem Bildschirm des Android-Gerätes erscheint.

/   Übungsaufgabe *

Überarbeiten Sie das Programm »MainActivity.java« so, daß es eine Formulareingabe an einen Web-Dienst sendet, und die erhaltene Antwort ausgibt.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722755 stefan_ram:722755 Web-Abfragen mit Android Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722755, slrprddef722755, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/web-abfragen_android