Daten an einen Webservice senden

Einleitung

Für dieses Tutorial wird der Umfrageserver genutzt. Da noch keine konkreten Umfrageergebnisse vorliegen, welche an den Server gesendet werden können, wird einfach ein Stück XML-Code gesendet. Der Server wird dann mit einer entsprechenden Fehlermeldung in Form eines XML-Dokumentes antworten.

Benutzeroberfläche

Die Benutzeroberfläche kann aus dem vorherigen Tutorial übernommen werden. Dadurch muss lediglich die Methode onClick des Listeners für den Button geändert werden und das Texteingabefeld wird entfernt.

Service ansprechen

Die onClick-Methode wird wie folgt implementiert:

public void onClick(View v) {
	HttpClient client = new DefaultHttpClient();
	
	try {
	    HttpPut request = new HttpPut("http://localhost:8080/questionnaire/put.xml");
	    
	    String data = "<test />";
	
	    StringEntity stringEntity = new StringEntity(data, "UTF-8");
	    stringEntity.setContentType("text/xml");
	
	    request.setEntity(stringEntity);
	
	    HttpResponse response = client.execute(request);
	    HttpEntity entity = response.getEntity();
	
	    responseText.setText(EntityUtils.toString(entity));
	
	} catch (Exception e) {
	    Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG)
	            .show();
	}
}

Zuerst wird wieder ein HttpClient-Objekt und anschließend ein HttpPut-Request erstellt. Der Request erhält die URL des Webservice als Parameter.

Nun müssen die Daten, welche gesendet werden sollen, in ein Objekt vom Typ StringEntity gepackt werden. Dies ist nötig, um den Content-Type der Daten anzugeben. Der Content-Type entscheidet mit darüber, welcher Service genau genutzt wird. Es ist zum Beispiel möglich, mehrere Services unter der selben URL zu betreiben, diese jedoch an Hand des Content-Types der eingehenende Daten zu unterscheiden. Der Umfrageserver erwartet XML-Daten als Eingabe. Wird der Content-Type nicht angegeben, so erhält man die Fehlermeldung, dass die Seite nicht gefunden wurde (HTTP 404).

Das StringEntity-Objekt wird nun mit dem Request-Objekt verbunden. Anschließend kann der Request ausgeführt und das Ergebnis ausgegeben werden.