Italian Aiuto su webservice

cirollo

Active Member
Licensed User
Longtime User
ciao a tutti!

un committente mi ha chiesto di realizzare una app Android (per ora, dopo anche ios) che dialoghi con un webservice presente su un server in cloud.

Potete verificare il funzionamento del webservice a questo link:

http://149.202.159.234:8081/ws/GetAlunni?annoSc=16/17&codice=0000014845

il risultato è un json con alcuni dati relativi ad un alunno (ho già filtrato nella chiamata un alunno con dati di test).

Questo è il risultato:

[{"CODSTUDE":"0000014845","COGSTUDE":"PAGANO ","NOMSTUDE":"MARIANGELA ","DTNASSTU":null,"CODSCUOL":"BREDA ","DESSCUOL":"BIAGIO GRIMALDI -BREDA M ","CLASTUDE":"1","SEZSTUDE":"B ","VALBUONI":13.20}]

Ho provato a creare la seguente applicazione in B4Android:

B4X:
Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   Activity.LoadLayout("Main")

End Sub

Sub JobDone (Job As HttpJob)
   Log("JobName = " & Job.JobName & ", Success = " & Job.Success)
   Log(Job.ErrorMessage)
   If Job.Success = True Then
       Dim res As String
       res = Job.GetString
       Log("Back from Job:" & Job.JobName )
       Log("Response from server: " & res)
         Log(Job.GetString)
       ' facciamo il parsing del json ricevuto
       Dim parser As JSONParser
       parser.Initialize(res)
       Dim ListOfPersons As List
       Dim Dato As String
       Dim Valore As String
       ListOfPersons = parser.NextArray 'returns a list with maps
              
       ListView1.Clear
              
       If ListOfPersons.Size=0 Then
           ListView1.AddSingleLine ("Nessun dato...")
       Else
           For i = 0 To ListOfPersons.Size - 1
               Dim Person As Map
               Person = ListOfPersons.Get(i)
                                          
               Dato = Person.Get("codstude")
               Valore = Person.Get("cogstude")
                      
               ListView1.AddSingleLine (Dato & ", " & Valore)
                      
           Next
       End If
      
   Else
     Log("Error: " & Job.ErrorMessage)
     ToastMessageShow("Error: " & Job.ErrorMessage, True)
   End If
   Job.Release
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Button1_Click
   Dim job1 As HttpJob
   job1.Initialize("Job1", Me)

   'Send a GET request
  
   job1.Download2("http://149.202.159.234:8081/ws/GetAlunni?", _
      Array As String("annoSc", "16/17 :)", "codice", "0000014845"))

End Sub

il log mi dice che il job ha avuto successo ma non riesco a ricevere alcun dato di ritorno....

Infatti nella mia listview trovo sempre "nessun dato..."

Premesso che è il mio primo tentativo con Json, cosa potrebbe essere che non va?
Grazie anticipatamente a tutti!

Ciro
 

Star-Dust

Expert
Licensed User
Longtime User
Be
ciao a tutti!

un committente mi ha chiesto di realizzare una app Android (per ora, dopo anche ios) che dialoghi con un webservice presente su un server in cloud.

Potete verificare il funzionamento del webservice a questo link:

http://149.202.159.234:8081/ws/GetAlunni?annoSc=16/17&codice=0000014845

il risultato è un json con alcuni dati relativi ad un alunno (ho già filtrato nella chiamata un alunno con dati di test).

Questo è il risultato:

[{"CODSTUDE":"0000014845","COGSTUDE":"PAGANO ","NOMSTUDE":"MARIANGELA ","DTNASSTU":null,"CODSCUOL":"BREDA ","DESSCUOL":"BIAGIO GRIMALDI -BREDA M ","CLASTUDE":"1","SEZSTUDE":"B ","VALBUONI":13.20}]

Ho provato a creare la seguente applicazione in B4Android:

B4X:
Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   Activity.LoadLayout("Main")

End Sub

Sub JobDone (Job As HttpJob)
   Log("JobName = " & Job.JobName & ", Success = " & Job.Success)
   Log(Job.ErrorMessage)
   If Job.Success = True Then
       Dim res As String
       res = Job.GetString
       Log("Back from Job:" & Job.JobName )
       Log("Response from server: " & res)
         Log(Job.GetString)
       ' facciamo il parsing del json ricevuto
       Dim parser As JSONParser
       parser.Initialize(res)
       Dim ListOfPersons As List
       Dim Dato As String
       Dim Valore As String
       ListOfPersons = parser.NextArray 'returns a list with maps
             
       ListView1.Clear
             
       If ListOfPersons.Size=0 Then
           ListView1.AddSingleLine ("Nessun dato...")
       Else
           For i = 0 To ListOfPersons.Size - 1
               Dim Person As Map
               Person = ListOfPersons.Get(i)
                                         
               Dato = Person.Get("codstude")
               Valore = Person.Get("cogstude")
                     
               ListView1.AddSingleLine (Dato & ", " & Valore)
                     
           Next
       End If
     
   Else
     Log("Error: " & Job.ErrorMessage)
     ToastMessageShow("Error: " & Job.ErrorMessage, True)
   End If
   Job.Release
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Button1_Click
   Dim job1 As HttpJob
   job1.Initialize("Job1", Me)

   'Send a GET request
 
   job1.Download2("http://149.202.159.234:8081/ws/GetAlunni?", _
      Array As String("annoSc", "16/17 :)", "codice", "0000014845"))

End Sub

il log mi dice che il job ha avuto successo ma non riesco a ricevere alcun dato di ritorno....

Infatti nella mia listview trovo sempre "nessun dato..."

Premesso che è il mio primo tentativo con Json, cosa potrebbe essere che non va?
Grazie anticipatamente a tutti!

Ciro
Bentornato, ci do un occhiata stasera
 

udg

Expert
Licensed User
Longtime User
Per il parsing (prova questo tool):
B4X:
Dim parser As JSONParser
parser.Initialize(res)
Dim root As List = parser.NextArray
For Each colroot As Map In root
 Dim CODSTUDE As String = colroot.Get("CODSTUDE")
 Dim DESSCUOL As String = colroot.Get("DESSCUOL")
 Dim CLASTUDE As String = colroot.Get("CLASTUDE")
 Dim SEZSTUDE As String = colroot.Get("SEZSTUDE")
 Dim VALBUONI As Double = colroot.Get("VALBUONI")
 Dim DTNASSTU As String = colroot.Get("DTNASSTU")
 Dim COGSTUDE As String = colroot.Get("COGSTUDE")
 Dim NOMSTUDE As String = colroot.Get("NOMSTUDE")
 Dim CODSCUOL As String = colroot.Get("CODSCUOL")
Next

Per il parametro di httpjob, prova:
Array As String("annoSc", "16/17", "codice", "0000014845"))

ps: se hai contatti con l'amministratore del server, avvisa che risponde all'indirizzo http://149.202.159.234 con il Welcome di IIS. Forse non è ciò che si aspetta.
pps: per non dire cosa appare se provi con http://149.202.159.234:8081/ws/GetAlunni?annoSc=16/17
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
questo codice a me funziona perfettamente:
B4X:
    Dim res As String = "[{""CODSTUDE"":""0000014845"",""COGSTUDE"":""PAGANO "",""NOMSTUDE"":""MARIANGELA "",""DTNASSTU"":null,""CODSCUOL"":""BREDA "",""DESSCUOL"":""BIAGIO GRIMALDI -BREDA M "",""CLASTUDE"":""1"",""SEZSTUDE"":""B "",""VALBUONI"":13.20}]"
   
   Dim parser As JSONParser
   parser.Initialize(res)
   Dim ListOfPersons As List
   ListOfPersons = parser.NextArray 'returns a list with maps
             
   Msgbox("Record letti: " & ListOfPersons.Size, "") ' qui mi appare "1"
   
   Dim Person As Map
   Person = ListOfPersons.Get(0)
                                         
   Dim Dato As String = Person.Get("CODSTUDE")
   Dim Valore As String  = Person.Get("COGSTUDE")

   Msgbox(Dato & ", " & Valore, "") ' qui mi appare i valori letti

Sicuramente il problema è che hai usato Person.Get("codstude") invece di Person.Get("CODSTUDE")
 

Star-Dust

Expert
Licensed User
Longtime User
Alla faccia della privacy
A partire dal 25 maggio in Italia si applicano le direttive europee sulla privacy
Molto più rigorose...chi ha un azienda o comunque un archivio si deve adeguare
 

sirjo66

Well-Known Member
Licensed User
Longtime User
eh sì, ne ho sentito parlare, sai dirci qualcosa di più preciso ??
un tutorial semplice da leggere ??
 

Star-Dust

Expert
Licensed User
Longtime User
eh sì, ne ho sentito parlare, sai dirci qualcosa di più preciso ??
un tutorial semplice da leggere ??
Vi riassumo brevemente il succo
Questa nuova legge protegge oltre ai dati sensibili che sono l'orientamento politico religioso e sessuale (già in vigore) protegge anche i dati personali quindi nome cognome indirizzo e numero di telefono
A partire dal 25 maggio se si devono trasferire il nominativo o altri dati personali a enti terzi bisogna avere un esplicita autorizzazione scritta della persona
Lo stesso se questi dati devono essere pubblicati in un sito internet o in una bacheca pubblica

Facciamo un esempio: se io faccio fatture elettroniche devo inviare i dati del mio cliente, compreso indirizzo partita iva e alto all'ente che trasferisce la fattura all'Agenzia delle Entrate. Questo Ente potrebbe essere Aruba o un qualunque altro provider di servizi per la fattura elettronica.
Io per poter inviare questi dati a questo Ente terzo devo chiedere al cliente di lasciarmi una dichiarazione in cui mi autorizza a trasferire i suoi dati all'ente che poi trasmetterà la fattura elettronica all'Agenzia delle Entrate
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Un club o un'associazione vorrebbe pubblicare sulla bacheca fisica un elenco stampato degli scritti, ogni persona in elenco deve autorizzare esplicitamente e firmare l'autorizzazione per cui il suo nome sia pubblicato e/o condiviso
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Questo però non è valido se gli elenchi sono solo a uso interno, ovvero se hp un elenco di clienti, tutti i dipendenti possono accedere a questa elenco o averne una copia e posso condividere un file di dati nella rete locale in cui tutti i miei dipendenti possono accedere

Posso ovviamente tenere i numeri telefonici nella rubrica telefonica perché mi sono stati ceduti personalmente E quindi ho diritto di tenere numeri telefonici e/o di condividerli privatamente internamente con gli altri dipendenti dell'azienda.

L' associazione può distribuire ai lavorante di quella associazione un elenco. Internamente possono lavorare sui nominativi e condividerli ma non possono condividere questi dati con enti terzi o pubblicarli o esporli senza esplicito consenso scritto

Bisogna creare quindi un modulo per il trattamento dei dati personali, da non confondere con i dati sensibili, da far firmare ai clienti.
Basta una autorizzazione iniziale, non è necessario per ogni fattura , ma prima del 25 maggio.

Chiunque ha facoltà di ritirare l'autorizzazione
 
Last edited:

udg

Expert
Licensed User
Longtime User
Il GDPR è in sostanza una rivisitazione e ammodernamento della precedente legge sulla privacy, ma a valenza UE.
Agli sviluppatori interessa principalmente il concetto di privacy "by design" (e anche "by default").
Ai titolari del trattamento (coloro che "raccolgono i dati") interessa pararsi le terga facendosi firmare autorizzazioni a tutto spiano sia dagli utenti che da eventuali fornitori ( ad esempio l'hosting provider su cloud o società di servizi coem detto da SD).
Ai responsabili del trattamento (coloro che sono incaricati tarmite contratto da un titoalre) interessa capire come evitare di rimanere con il cerino in mano, soprattutto in caso di data breach (furto o perdita di dati).

ps: tra i dati sensibili ci sono anche quelli sanitari (es. segreteria scolastica che in questi gg dovrebbe comunicare se i bambini hanno la certificazione sui vaccini obbligatori..)

pps: ad un convegno sul tema ho chiesto "il pizzicagnolo/bottegaio sotto casa che ha l'elenco e i recapiti telefonici dei clienti che desiderano la consegna a domicilio, è soggetto al GDPR? La risposta è stata affermativa..."; in pratica è stato messo su un baraccone con l'intento di colpire i Big Data (Google, Amazon..) ma che in pratica servirà solo per multare i soliti noti... niente di nuovo dalle parti della UE!
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
A parte che mi sembra che, insolitamente, siamo leggermente fuori tema...

"Designed for Families" non è spuntabile (disattivata); sulle vostre app?
Credo di aver capito che serva che io metta un link proprio a qualche sito con regole sulla privacy.
Ne conoscete qualcuno che venga accettato?

(Sarà anche per questa mancanza che molte app non ottengono download?)
 

LucaMs

Expert
Licensed User
Longtime User
Annamo bbene:
upload_2018-5-3_14-32-10.png


"impegnIamo", con la I !!!
 

cirollo

Active Member
Licensed User
Longtime User
A partire dal 25 maggio in Italia si applicano le direttive europee sulla privacy
Molto più rigorose...chi ha un azienda o comunque un archivio si deve adeguare

Grazie a tutti, oggi faccio dei test aggiuntivi, purtroppo il lato webservice non è roba mia, domani mi incontro con chi lo ha realizzato e faccio presente le vostre giustissime osservazioni.....

PS i dati che vedete sono fittizi, cmq

diciamo però che la chiamata al ws sarà dentro l'app e quindi non in chiaro.....non basta?

vi aggiorno!
ciao
 
Last edited:

cirollo

Active Member
Licensed User
Longtime User
questo codice a me funziona perfettamente:
B4X:
    Dim res As String = "[{""CODSTUDE"":""0000014845"",""COGSTUDE"":""PAGANO "",""NOMSTUDE"":""MARIANGELA "",""DTNASSTU"":null,""CODSCUOL"":""BREDA "",""DESSCUOL"":""BIAGIO GRIMALDI -BREDA M "",""CLASTUDE"":""1"",""SEZSTUDE"":""B "",""VALBUONI"":13.20}]"
 
   Dim parser As JSONParser
   parser.Initialize(res)
   Dim ListOfPersons As List
   ListOfPersons = parser.NextArray 'returns a list with maps
         
   Msgbox("Record letti: " & ListOfPersons.Size, "") ' qui mi appare "1"
 
   Dim Person As Map
   Person = ListOfPersons.Get(0)
                                     
   Dim Dato As String = Person.Get("CODSTUDE")
   Dim Valore As String  = Person.Get("COGSTUDE")

   Msgbox(Dato & ", " & Valore, "") ' qui mi appare i valori letti

Sicuramente il problema è che hai usato Person.Get("codstude") invece di Person.Get("CODSTUDE")


in realtà il problema è che ho res=[]

anche utilizzando questo:

B4X:
job1.Download2("http://149.202.159.234:8081/ws/GetAlunni?", _
         Array As String("annoSc", "16/17", "codice", "0000014845"))


come mai???


update: risolto devo togliere il ? dopo GetAlunni.....
 
Last edited:
Top