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.
Manifest-Eintrag INTERNET
Eine App, die Netzwerkkommunikation betreiben will, benötigt die
Berechtigung INTERNET.
Diese Berechtigung muss in der
Manifest-Datei
hinterlegt sein.
Hintergrund
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.
HTTP: Das Webprotokoll
Für die eigentliche Kommunikation wird die Klasse
HttpURLConnection verwendet.
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
namens Steigern auf dem PC 192.168.109.190.
JSON
Das Servlet wird mit dem Server Daten austauschen, die in
XML oder in
JSON kodiert werden.
JSONObject