Italian Get & Post

t3radm

Member
Licensed User
Longtime User
Buongiorno e scusatemi per l'eventuale banalità...
Ho programmato in Basic4Android per circa 15gg dopo l'acquisto, mi sono concentrato su di un nuovo progetto da scrivere in c per una elettronica embedded ed ora non ricordo una ...:sign0137:

In pratica ho realizzato una scheda collegata alla rete lan che risponde a delle richieste GET da parte di un browser (es. http://domotica.t3radm.it/ute12 interroga la scheda che restituisce lo stato e il valore dell'utenza n°12) la risposta viene restituita con una struttura simile ad un xml quindi con un tag aperto il valore e tag chiuso (es. <UTE12> CHIUSO </UTE12>) quindi estrapolando il valore all'interno del tag UTE12 ne conosco lo stato.

Ora tornando a noi... Vorrei realizzare un'applicazione per Android che possa interrogare la scheda premendo un tasto (o qualunque altro evento) (deve in praticare inviare una richiesta post come nell'esempio precedente http://domotica.t3radm.it/"valore in funzione al tasto/evento") e nello stesso tempo ricevendo la stringa tipo <UTE12> CHIUSO </UTE12> possa mostrarlo graficamente...)


Spero di essermi spiegato almeno un pò... il mio problema è per il momento solo nella gestione dell' invio e ricezione di un parametro da un indirizzo di rete (internet)


Per chi volesse darmi una mano grazie anticipatamente... :wav:
 

t3radm

Member
Licensed User
Longtime User
Allora...
Il metodo per interpretare la risposta del webserver penso di averla trovata.
Tramite le libs HTTP creo un oggetto e lo chiamo rx
B4X:
Dim rx as HttpClient
lo inizializzo
B4X:
Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("WebClient")
    If FirstTime Then
      rx.Initialize("rx")
    End If
End Sub
e alla pressione di uno dei tasti eseguo il Get nel seguente modo:
B4X:
Sub Richiedi_Click
   Dim ricevi As HttpRequest
   ricevi.InitializeGet("http://domotica.t3radm.it")
   rx.Execute(ricevi, 1)
End Sub

alla fine del caricamento della pagina dovrebbe scatenare l'evento ResponseSuccess ma ho un problema ecco un pezzo del codice:
B4X:
Sub rx_ResponseSuccess(risposta As HttpResponse, id As Int)
   Dim testo  As String
   testo = risposta.GetString("UTF8")
...
   
End Sub
Il problema è che alla pressione del tasto "Richiedi" ottengo sempre un errore java "NetworkOnMainTreadException" errore che scompare se elimino la linea di codice che mi deve convertire la risposta in formato UTF8 in una stringa di testo, se non eseguo la conversione e guardo il testo ricevuto inserendolo in una EditText vedo solo 2 righe non appartenenti al sito web

PS ho provato a cambiare l'indirizzo da dove ricevera la pagina internet ma non cambia nulla

Sempre in attesa di aiuto...
 

t3radm

Member
Licensed User
Longtime User
ummm... il problema è sicuramente questo " GetString (DefaultCharset As String) As String
This method is deprecated and will not work properly on Android 4+ device.
Use GetAsynchronously instead
."

Qualcuno mi può spiegare come cambiare il metodo mentre io ci provo...

 

t3radm

Member
Licensed User
Longtime User
Ok risolto grazie alle HttpUtils2

Giusto per non continuare con il soliloquio, sono ben accetti suggerimenti e aiuti..

Bye
 

t3radm

Member
Licensed User
Longtime User
Ok trovato anche una "specie" di soluzione per inviare i comandi utilizzando una WebView

B4X:
Sub Button2_Click
   WebView1.LoadUrl("http://domotica.t3radm.it/<UTE1>TRUE</UTE1>")
End Sub

Basta non mostrare la WebView e il gioco è fatto e funziona, il problema ora è questo:

Ovviamente l'accesso al webserver è protetto da login e password, ma nel caso di accesso con WebView è possibile gestire in maniera trasparente la cosa in quanto l'oggetto webview include l'eccezione che ho gestito così:

B4X:
Sub WebView1_UserAndPasswordRequired("miaLogin" As String, "miaPassword" As String) As String()
   Return Array As String("miaLogin", "miaPassword")
End Sub
Tutto ok i parametri login e password vengono passati al webserver in maniera corretta e assolutamente trasparente all'utente, ora però mi si pone il problema con il metodo descritto qualche post fa per acquisire pezzi di codici generati dal webserver in quanto anche se già loggato al server con il metodo appena descritto alla richiesta di copiare la pagina mi viene mostrato il messaggio di errore con l'impossibilità di accedere a causa di una autorizzazione necessaria (login e password).

Se qualcuno mi da una mano almeno in questo, tutto il resto del programma dovrebbe filare liscio...

Grazie e buona Domenica
 

t3radm

Member
Licensed User
Longtime User
Ok risolto anche l'ultimo problema, ma ho dovuto abbandonare le libs HTTP e utilizzare la libreria JSInterface (tra l'altro non più supportata a favore della WebViewExt dello stesso autore).
La libreria consente di eseguire codice java all'interno di una webview, poi con CallSub passo la pagina http ad una sub di b4a e da li si possono estrapolare quello che si vuole..

Per il momento sembra tutto ok.. proverò a postare nuovamente per eventuali altri problemi... (non è una promessa ma una minaccia !!! :BangHead: )


by
 

Phsoftware_app

Member
Licensed User
Longtime User
Ciao,se ti può interessare ho creato MyDomotica proprio per gestire delle schede web relè
Piu precisamente quelle della Kmtronic, ProgettiHwSW e della Unixmedia

Saluti
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…