1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

kSoap2 und openLigaDB - Fragen (Anfänger)

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von xebero, 30.03.2010.

  1. xebero, 30.03.2010 #1
    xebero

    xebero Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    21.03.2010
    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_ACTIONsoapEnvelope);
                   
    SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
                   
    tv.setText("Status: " resultString);        
            }
            catch(
    Exception e)
            {
                
    e.printStackTrace();
            }
        }
    }

    Als Ergebnis erhalte ich immer FALSE... kann mir jemand helfen?
     
  2. xebero, 31.03.2010 #2
    xebero

    xebero Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    21.03.2010
    Keine eine Idee? Bekomme es alleine einfach nicht hin...
     
  3. Shinigami, 31.03.2010 #3
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    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: 31.03.2010
  4. xebero, 31.03.2010 #4
    xebero

    xebero Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    21.03.2010
    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...
     
  5. xebero, 31.03.2010 #5
    xebero

    xebero Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    21.03.2010
    Auflösung zu dem Problem mit der URL oben: Das hat das Forum so umgewandelt...
     
  6. Shinigami, 31.03.2010 #6
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    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 = (TextViewfindViewById(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_ACTIONsoapEnvelope);
                   
    SoapObject resultString = (SoapObjectsoapEnvelope.getResponse();
                   
    //String text = String.valueOf(result.getPropertyCount()); // Anzahl  der Elemente
                   
    SoapObject result = (SoapObjectresultString.getProperty(0); //einfach mal das erste Element "holen"          
                   
    SoapPrimitive text = (SoapPrimitiveresult.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
     
  7. xebero, 31.03.2010 #7
    xebero

    xebero Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    21.03.2010
    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 :)
     
  8. Shinigami, 01.04.2010 #8
    Shinigami

    Shinigami Fortgeschrittenes Mitglied

    Beiträge:
    436
    Erhaltene Danke:
    69
    Registriert seit:
    08.04.2009
    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
     
  9. xebero, 01.04.2010 #9
    xebero

    xebero Threadstarter Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    21.03.2010
    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.
     
  10. baeckerman83, 14.06.2011 #10
    baeckerman83

    baeckerman83 Neuer Benutzer

    Beiträge:
    18
    Erhaltene Danke:
    0
    Registriert seit:
    09.02.2011
    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. :)
     

Diese Seite empfehlen