German Sichtbarkeit von Variablen

Discussion in 'German Forum' started by umsid, Aug 26, 2017.

  1. umsid

    umsid Member Licensed User

    Hallo Leute,
    ich bin ein absoluter Anfänger in B4A, habe Software wohl schon einige Jahre auf meinem Rechner, komme aber nicht dazu mich damit zu beschäftigen.
    Jetzt ist Urlaub und ich habe etwas Zeit.

    Und schon bin ich beim ersten Problem:
    Ich möchte über HTTP Daten von einer Website empfangen und diese weiterverarbeiten.

    Dabei sind folgende Probleme aufgetaucht:
    1. Scheinbar ist die "okhttp" Library die Neuere, bzw. die, die man verwenden sollte, wenn man http Zugriffe verwenden möchte. Ich finde aber weder eine Beschreibung, noch Beispielprogramme zu der Library. Wo kann ich so was nachlesen.

    2. unter Verwendung der http Library und einem Beispielprogramm habe ich es geschafft, Daten vom Webserver zu lesen.
    diese Daten werden im sub WebAccess_ResponseSuccess bereitgestellt - dort hat das Beispiel auch die Daten angezeigt. Soweit funktioniert es auch......

    Ich möchte die Daten aber in dem sub btImportMOS_Click weiterverarbeiten. Dort ist die Variable Matchlist immer leer, obwohl ich Sie als Global für die komplette App declariert habe - zumindest denke ich, dass ich das mit "Dim Matchlist As String" in "process_globals" gemacht habe.
    Trotzdem ist die Variable leer.

    kann mir jemand auf die Sprünge helfen?

    im Anhang als zip die Gehversuche meines Projekts.

    vg
    Guenter
     

    Attached Files:

  2. DonManfred

    DonManfred Expert Licensed User

    vergiss die alte HTTP library und lösch alles was du hast darüber.

    Benutze okHttputils2

    Ich habe das mal auf okhttp umgestellt.
    Desweiteren habe ich das neue Match in eine neue Activity gepackt wie es sich gehört.

    Ich schlage vor, Du beschäftigst dich erstmal mit den Anfänger-tutorials.

    https://www.b4x.com/b4a.html
    ->Beginners Guide und Users Guide



    Code:
    Sub btImportMOS_Click
        
    'Dim JSON As JSONParser
        'Dim Map1 As Map
        'Activity.LoadLayout("ImportMOS.bal")
        Dim Job As HttpJob
        Job.Initialize(
    "matchlist",Me)
        Job.Download(
    "http://www.ipsc-dvc.org/components/com_ipsc/json_output.php?status=matchlist")
    End Sub
    Sub JobDone(job As HttpJob)
        
    If job.Success Then
            
    'Log(job.GetString)
            Dim parser As JSONParser
            parser.Initialize(job.GetString)
            
    Dim root As List = parser.NextArray
            
    For Each colroot As Map In root
                
    Dim date As String = colroot.Get("date")
                
    Dim name As String = colroot.Get("name")
                
    Dim KindOfMatch As String = colroot.Get("KindOfMatch")
                
    Dim id As String = colroot.Get("id")
            
    Next
        
    Else
            
    Log($"Error in Job ${job.JobName}: ${job.ErrorMessage}"$)
            job.Release       
        
    End If
    End Sub
    Für das Ausswerten von JSON empfehle ich Dir dieses Tool: http://basic4ppc.com:51042/json/index.html
     

    Attached Files:

  3. umsid

    umsid Member Licensed User

    Hallo Manfred,

    erst einmal vielen Dank für die schnelle Antwort.
    Du weißt, "try and error" ist oft nicht das Beste, aber machen tut man das immer wieder.
    Ich werde die beiden PDFs jetzt mal auf mein Pad laden und an den Strand gehen.

    Zu Deinen Änderungen:
    Dafür ist scheinbar meine JDK zu alt - ich bekomme einen Fehler.
    Aber das schau ich mir jetzt mal ganz genau an, installiere mal die aktuelle JDK und dann werde ich sehen.

    Noch einmal vielen Dank für die Änderungen und die Empfehlungen.
    Guenter
     
  4. DonManfred

    DonManfred Expert Licensed User

    Ich verwende B4A 7.3, JAVA 8
     
  5. umsid

    umsid Member Licensed User

    ich jetzt auch und jetzt funktioniert es.

    Jetzt ist lesen angesagt ;-)

    Schönes Wochenende
    Guenter
     
    Alexander Stolte likes this.
  6. umsid

    umsid Member Licensed User

    Hallo Manfred,
    kann ich Dir zu dem Beispiel, das Du mir geschickt hast, noch eine Frage stellen?

    Du initialisierst in dem Bespiel einen Job, den Du dann mit JobDone bearbeitest.
    In dem JobDone liest Du aber schon die entsprechenden Felder in Variablen ein.

    Wenn ich jetzt weiterführend - nach Auswahl eines Matches - noch eine Job Abfrage starten möchte und diese andere Felder hat, dann würde diese doch nach dem Ablauf auch die JobDone Routine aufrufen.
    Wie kann ich das lösen, dass dann andere Felder aus einer neuen (anderen) Json Übergabe ausgelesen werden?

    Habe ich mich richtig ausgedrückt? - Falls nicht, würde ich etwas weiter ausholen.
    vg
    Guenter
     
  7. DonManfred

    DonManfred Expert Licensed User

    Wenn Du B4A 7+ benutzt, dann kannst Du auch wait for einsetzen und auf JobDone verzichten weil Du die Antwort woanders auswertest.
     
  8. DonManfred

    DonManfred Expert Licensed User

    ja, aber mit einem anderen Job.Jobname (den du beim anlegen definiert hast)
     
  9. DonManfred

    DonManfred Expert Licensed User

    Ungefähr so

    Code:
    Sub btImportMOS_Click
        
    'Dim JSON As JSONParser
        'Dim Map1 As Map
        'Activity.LoadLayout("ImportMOS.bal")
        Dim Job As HttpJob
        Job.Initialize(
    "matchlist",Me)
        Job.Download(
    "http://www.ipsc-dvc.org/components/com_ipsc/json_output.php?status=matchlist")
        
    wait for(job) JobDone(Job As Httpjob)
        
    If job.Success Then
            
    'Log(job.GetString)Dim parser AsJSONParser
            parser.Initialize(job.GetString)
            
    Dim root As List = parser.NextArray
            ForEach colroot 
    As Map In root
                
    Dim date AsString = colroot.Get("date")
                
    Dim name AsString = colroot.Get("name")
                
    Dim KindOfMatch As String = colroot.Get("KindOfMatch")
                
    Dim id As String = colroot.Get("id")
            
    Next
        
    Else
            
    Log($"Error in Job ${job.JobName}: ${job.ErrorMessage}"$)
        
    End if
        job.Release 
    End Sub
     
  10. umsid

    umsid Member Licensed User

    Vielen Dank das funktioniert.
    Jetzt versuche ich mal die zweite JSON Variable einzulesen.

    Guenter
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice