Android-Programmierung: Servlet-Client

Willemers Informatik-Ecke

Das einzig seriöse Javabuch :-) Mehr...

.. enthält ein Kapitel zur Android-Programmierung.
Bei Amazon bestellen
2016-02-28
Auf diesen Seiten halte ich meine Erfahrungen im Bereich der Android-Programmierung fest, um sie später nachschlagen zu können. Die Ausführungen sind kein vollständiger Kurs, manchmal nur Notizen, aber vielleicht anderen hilfreich. Das Beispiel zeigt eine Android-App, die ein Servlet kontaktiert, ihm einen Zahlenwert in Form eines Strings zusendet und das Ergebnis empfängt. Das Servlet erhöht den Wert um 1 und sendet ihn zurück.

Eine App, die Netzwerkkommunikation betreiben will, benötigt die Berechtigung INTERNET, sonst funktioniert sie nicht. Diese muss in der Manifest-Datei hinterlegt sein.

Eine Netzwerkkommunikation kann eventuell länger dauern. Darum sollte der Empfang der Antwort in einem eigenen Thread geschehen, damit die Oberfläche der App nicht einfriert.

package de.willemer.servletclient;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;

public class ServletClientActivity extends Activity implements View.OnClickListener {

    EditText edZahl = null;
    Button btSteigern = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_servlet_client);

        edZahl = (EditText) findViewById(R.id.edZahl);
        btSteigern = (Button) findViewById(R.id.btSteigern);
        btSteigern.setOnClickListener(this);
    }

    Integer antwortwert = 0; // fuer den Datenaustausch zwischen Threads

    @Override
    public void onClick(View v) {

        if (v.getId()==R.id.btSteigern) {
            new Thread(new Runnable() {
                public void run() {
                    String antwort = "";
                    try {
                        URL url = new URL("http://192.168.109.190:8080/MeinServlet/Steigern");
                        URLConnection connection = url.openConnection();
                        // Nehme die Zahleneingabe und sende sie.
                        String eingabe = edZahl.getText().toString();
                        //eingabe = URLEncoder.encode(eingabe, "UTF-8");
                        connection.setDoOutput(true);
                        OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
                        out.write(eingabe);
                        out.close();
                        // Lese die Antwort vom Server
                        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        String str = "";
                        while ((str = in.readLine()) != null) {
                            antwort = str; // Kopie, die nicht null wird.
                            Log.d("ServletClient: ", antwort);
                        }
                        in.close();

                    } catch(IOException e) {
                        Log.d("ServletClient", e.toString());
                    }
                    // Werte den erhaltenen String aus.
                    try {
                        antwortwert = Integer.parseInt(antwort);
                    } catch(NumberFormatException e) {
                        Log.d("ServletClient",e.toString());
                    }
                    // Schaffe die Eingabe in das Textfeld. Dazu in den anderen Thread
                    runOnUiThread(new Runnable() {
                        public void run() {
                            edZahl.setText(antwortwert.toString());
                        }
                    });
                }
            }).start();
        }
    }
}
Das Client-Programm ruft das Servlet Steigern auf dem PC 192.168.109.190.

Homepage (C) Copyright 2016 Arnold Willemer