German Sichtbarkeit von Variablen

umsid

Member
Licensed User
Longtime 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
 

Attachments

  • shooter.zip
    29 KB · Views: 373

DonManfred

Expert
Licensed User
Longtime 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



B4X:
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
 

Attachments

  • mosneu.zip
    29.6 KB · Views: 349

umsid

Member
Licensed User
Longtime 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
 

umsid

Member
Licensed User
Longtime 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
 

DonManfred

Expert
Licensed User
Longtime User
Ungefähr so

B4X:
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
 

umsid

Member
Licensed User
Longtime User
Vielen Dank das funktioniert.
Jetzt versuche ich mal die zweite JSON Variable einzulesen.

Guenter
 
Top