kSoap2 und openLigaDB - Fragen (Anfänger)

X

xebero

Neues Mitglied
0
Hallo zusammen,

vorab: ich bin Anfänger, also bitte nicht schlagen.

Ich versuche auf die Soap-Schnittstelle von OpenLigaDB - sports results by XML Web service! zuzugreifen... habe dafür ein Tutorial über android in Verbindung mit kSoap2 gefunden. Das hat auch alles prima geklappt... testweise wird im Tutorial eine Schnittstelle benutzt um Celsius in Fahrenheit umzuberechnen. Der Code läuft. Nun weiß ich aber nicht, wie ich das umbaue, um Daten von der openligadb zu erhalten... Mein Versuch sieht wie folgt aus:

PHP:
package de.Test;

import android.app.Activity;
import android.os.Bundle;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.widget.TextView;

public class Starting extends Activity {
    /** Called when the activity is first created. */
    
    // DAS IST DER TEIL AUS DEM TUTORIAL - DER LÄUFT
    //private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
    //private static final String METHOD_NAME = "CelsiusToFahrenheit";
    //private static final String NAMESPACE = "http://tempuri.org/";
    //private static final String URL = "TempConvert Web Service";
    
    //DAS WÜRDE ICH GERN TUN - LÄUFT ABER NICHT
    private static final String SOAP_ACTION = "http://www.openligadb.de/Webservices/GetAvailLeagues";
    private static final String METHOD_NAME = "GetAvailLeagues";
    private static final String NAMESPACE = "http://www.openligadb.de/Webservices/";
    private static final String URL = "Sportsdata Web Service";
    
    TextView tv;
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView)findViewById(R.id.TextView01);
        
        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
        
        // GEHÖRT ZUM TUTORIAL - die Openligadb erwartet für "GetAvailLeagues" keine Parameter
        // Request.addProperty("Celsius", "20");
        
        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(Request);
        
        AndroidHttpTransport tns = new AndroidHttpTransport(URL);
        
        try
        {
               tns.call(SOAP_ACTION, soapEnvelope);
               SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
               tv.setText("Status: " + resultString);        
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
Als Ergebnis erhalte ich immer FALSE... kann mir jemand helfen?
 
Keine eine Idee? Bekomme es alleine einfach nicht hin...
 
Hallo.

Ich glaube es liegt nicht daran, dass niemand eine Idee hat - nur habe ich zumindest das Gefühl, dass Du Dich bisher nicht ausreichend mit dem Thema befasst hast und jetzt hier eine Lösung abholen möchtest. Ich glaube Du wirst noch einige Hausaufgaben machen müssen :D

Da mich das Thema generell auch interessiert, versuche ich mal Input zu geben. Ich habe einen kurzen Blick auf die WSDL des Services geworfen, den Du versuchst zu verwenden. Folgendes ist mir spontan aufgefallen, was dem widerspricht, was ich in dem Coding sehe:

Code:
<wsdl:definitions target[B]Namespace[/B]="http://msiggi.de/Sportsdata/Webservices">
Code:
<wsdl:operation name="GetAvailLeagues">
<soap:operation [B]soapAction="http://msiggi.de/Sportsdata/Webservices/GetAvailLeagues"[/B] style="document"/>

Übrigens beinhaltet Deine Konstante URL auch eine kuriose URL :)

Gruß,
Shini
 
Zuletzt bearbeitet:
Danke für die Antwort - ich sag's ja, ich bin Anfänger - und natürlich erhoffe ich mir eine Lösung abzuholen - denn ich habe mich wirklich lange damit beschäftigt und keine Lösung gefunden. Ich hoffe ja nur durch die Lösung, die hier vielleicht gefunden wird zu lernen...

Das mit dem "msiggi.de" hatte ich schon getestet - ohne Erfolg... die URL - Ups, stimmt - keine Ahnung wie das da reingekommen ist, aber auch das bringt mich nicht weiter (vorher schon getestet)...

Ich glaube das Problem ist, dass im Tutorial nur ein Wert zurückgeliefert wird (das Ergebnis der Umrechnung von Fahrenheit nach Celsius oder umgekehrt), während hier mehrere Ergebnisse / Variablen zurückgegeben werden... ich weiß aber nicht, wie ich auf die zugreife...

Sicher werde ich noch einige Hausaufgaben machen müssen - stehe ja noch ganz am Anfang und versuche zu lernen...
 
Auflösung zu dem Problem mit der URL oben: Das hat das Forum so umgewandelt...
 
Hi,

hier mein Vorschlag (extrem Quick'n'Dirty!!):

PHP:
private static final String SOAP_ACTION = "http://msiggi.de/Sportsdata/Webservices/GetAvailLeagues";
    private static final String METHOD_NAME = "GetAvailLeagues";
    private static final String NAMESPACE = "http://msiggi.de/Sportsdata/Webservices";
    private static final String URL = "http://www.openligadb.de/Webservices/Sportsdata.asmx";

    
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = (TextView) findViewById(R.id.text);
        
        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
        
        // GEHÖRT ZUM TUTORIAL - die Openligadb erwartet für "GetAvailLeagues" keine Parameter
        // Request.addProperty("Celsius", "60");
        
        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(Request);
        
        AndroidHttpTransport tns = new AndroidHttpTransport(URL);
        
        try
        {
               tns.call(SOAP_ACTION, soapEnvelope);
               SoapObject resultString = (SoapObject) soapEnvelope.getResponse();
               //String text = String.valueOf(result.getPropertyCount()); // Anzahl  der Elemente
               SoapObject result = (SoapObject) resultString.getProperty(0); //einfach mal das erste Element "holen"          
               SoapPrimitive text = (SoapPrimitive) result.getProperty("leagueName"); //einer von 5 Werten
               tv.setText("Status: " + text.toString());
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
Code:
<League>
               <leagueID>50</leagueID>
               <leagueSportID>1</leagueSportID>
               <leagueName>1. Fussball-Bundesliga 2002/2003</leagueName>
               <leagueShortcut>bl1</leagueShortcut>
               <leagueSaison>2002</leagueSaison>
            </League>
Diesen "Block" gibt's in der Antwort glaub ich 63 mal...

Have fun!

Gruß,
Shini
 
Dankeeee - war hier schon am verzweifeln... das hat mich weitergebracht und funktioniert. Danke!

Bitte nicht schlagen für die dumme Frage, aber ich will verstehen: War das Problem, dass ich sowas wie ein Array erhalte als Ergebnis und nicht wie im Tutorial eine einfache Variable? Liege ich damit richtig?

Sorry, meine Programmierkenntnisse sind halt mies - aber ich fange gerade mit dem Buch "Java von Kopf bis Fuss an" - bin also zumindest lernwillig :)
 
Hi,

freut mich, dass es funktioniert.

Wie bereits gesagt waren Deine Aufrufparameter (URL, Namespace etc) zumindest im geposteten Beispiel ein wenig falsch - das muss natürlich alles stimmen. Hier der Vollständigkeit halber noch der WSDL-Part, der die URL verrät (steht in der WSDL so ziemlich als letztes):

Code:
<soap:address location="http://www.openligadb.de/Webservices/Sportsdata.asmx"/>

Und Du hast recht, der Rückgabewert ist kein primitiver Typ sondern ein komplexer (also eine mit unter mehrfach verschachtelte Struktur, wenn man die Rückgabe-XML wie oben gepostet betrachtet). Ich empfehle Dir übrigens das Tool soapUI - damit kann man bequem Web Service Aufrufe testen und sich die XML-Strukturen ansehen, welche da hin- und hergeschickt werden.

Hoffe, dass Du mit Deinem Projekt voran kommst :)

Gruß,
Shini
 
Großartig - vielen vielen Dank!

SoapUI schaue ich mir gleich an - und ja, ich komme voran - aber um ein wirkliches Projekt handelt es sich hierbei nicht. Ich spiele nur für mich selbst damit rum um ein bisschen was zu lernen. Hab lediglich Erfahrung mit ein klein wenig PHP + mySQL - drum ist das hier für mich alles nicht so leicht - aber Du hast mir sehr geholfen.
 
Wo gibt es denn das kSoap2 Tutorial? Ich suche und suche und finde es nicht. Also genau das mit den Temperaturen scheint mir ein gutes zu sein. :)
 

Ähnliche Themen

R
  • Gesperrt
  • roland-senior
Antworten
2
Aufrufe
786
Fulano
Fulano
Laser5001
Antworten
3
Aufrufe
622
swa00
swa00
M
Antworten
2
Aufrufe
605
Mozart40
M
Zurück
Oben Unten