Autore Topic: WebView - Come passare dati da script html al codice Android?!  (Letto 1598 volte)

Offline MariFio

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google ideos
  • Sistema operativo:
    Mac OS X 10.5
WebView - Come passare dati da script html al codice Android?!
« il: 02 Maggio 2011, 13:25:59 CEST »
0
Salve, il titolo è un pò ambiguo, cercherò di spiegarmi meglio :D
ho realizzato un applicativo web tramite l'utilizzo delle webview. L'applicazione prevede un modulo per il login (utilizzo database mySql e file jsp per la comunicazione con il server) che permette quindi all'utente di loggarsi all'interno dell'applicazione. Il punto è il seguente:

voglio far capire al mio .apk che l'utente è loggato, ovvero il risultato della pagina jsp (magari di una flag di tipo true se il login è andato a buon fine) venga passata al codice android. In pratica voglio che il valore di una variabile definito all'interno della pagina html passi al codice e che quindi io possa lavorarla come una normale variabile. Ho cercato di creare una javascriptinterface, come specificato per i problemi seguenti, ma il suo utilizzo (almeno per quanto ne ho capito io) è per mostrare ad esempio un "Hello World", definito all'interno del codice Android attraverso una classe ed un'apposita funzione, all'interno della pagina web attraverso un innerHTML. Mi domandavo è possibile effettuare il processo inverso? ovvero DATI BROWSER -> TERMINALE e non TERMINALE-> BROWSER? Ecco quanto fatto da me, senza ottenere risultati :)

Questa è la mia interfaccia:
Codice (Java): [Seleziona]
public class JavaScriptInterface {
        String utente="";
       
        public String saveUser(String user){
                utente=user;
                return utente;
        }
       
}

Questo è l'onCreate, ma la mia logica mi sà che non è efficace :) :

Codice (Java): [Seleziona]
 JavaScriptInterface interfaccia=new JavaScriptInterface();
       
        myWebView=(WebView) findViewById(R.id.webView1);
       
        WebSettings webSettings= myWebView.getSettings();
        webSettings.setBuiltInZoomControls(true);
        webSettings.setJavaScriptEnabled(true);
       
        myWebView.addJavascriptInterface(interfaccia, "RetriveUser");
        myWebView.setWebViewClient(new WebViewClient());
        myWebView.loadUrl("MIO SITO");
        TextView User = (TextView) findViewById(R.id.textView1);
        User.setText(interfaccia.utente);

Questa invece la pagina html dopo il login avvenuto con successo:

Codice (Java): [Seleziona]
Successfully login by JSP<br />
Session Value<br />

<script>
RetriveUser.saveUser(session.getAttribute("sUserName"));
</script>

<div id=outputNome>Vai all'applicativo</div>
<a href="login.jsp"><input type="submit" value="Diving Center Login" onClick="document.getElementById('
outputNome')".innerHTML=RetriveUser.showUser(session.getAttribute("sUserName"))" /></a>

Mi domandavo anche è corretto il primo metodo, quello tra i tag <script> oppure il secondo? oppure (sicuramente) nessuno dei due?
Scusate la mia noobaggine, ma sono nuovo in questo tipo di programmazione!
Grazie per l'eventuale aiuto.
Saluto
MF


« Ultima modifica: 02 Maggio 2011, 13:29:01 CEST da MariFio »

Offline MariFio

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google ideos
  • Sistema operativo:
    Mac OS X 10.5
Re:WebView - Come passare dati da script html al codice Android?!
« Risposta #1 il: 03 Maggio 2011, 10:30:41 CEST »
0
Ragazzi ho risolti studiando meglio l'interfaccia javaScript bridge. in pratica da un file html (jsp etc. etc.) è possibile, attraverso un'apposito script javascript, invocare delle funzioni presenti all'interno del codice Android (attraverso il bridge). Vi allego un pò di codice funzionante:

file .jsp (Codice Javascript):
Codice (Java): [Seleziona]
<script type="text/javascript">
                        function invoke(){
                                //invoking the JavascriptBridge registered under the 'jb' namespace
                                jsBridge.logInVerify();
                        }
                        function ritarda(){
                                setTimeout("invoke()", 5000);
                        }
                </script>

</head>

<body>
<script>
ritarda();
</script>

File bridgeJS:
Codice (Java): [Seleziona]
final class JavaScriptInterface{
        public void logInVerify(){
                Intent avviaInterfacciaLogIn=new Intent(WebViewOverride.this, Activity2.class);
            startActivity(avviaInterfacciaLogIn);
        }
    }

Codice presente nell'onCreate dell'Activity:
Codice (Java): [Seleziona]
JavaScriptInterface interfaccia=new JavaScriptInterface();
        myWebView=(WebView) findViewById(R.id.webView1);
       
        WebSettings webSettings= myWebView.getSettings();
        webSettings.setBuiltInZoomControls(true);
        webSettings.setJavaScriptEnabled(true);
       
        myWebView.addJavascriptInterface(interfaccia, "jsBridge");
        myWebView.setWebViewClient(new WebViewClient());
        myWebView.loadUrl("URL");

Per qualsiasi domanda inviate anche MP.
Grazie a tutti, potete chiudere!
Saluto
MF



Offline Tunarock

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire S
  • Sistema operativo:
    Windows Vista
Re:WebView - Come passare dati da script html al codice Android?!
« Risposta #2 il: 11 Marzo 2012, 17:54:21 CET »
0
Mi stavo chiedendo (e forse aprirò un nuovo topic) è possibile fare il contrario?

cioè, posso tramite funzioni java eseguire o addirittura prelevare codice javascript?
"Quando fai le cose per bene, nessuno sospetterà che tu abbia fatto realmente qualcosa"

Offline MariFio

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google ideos
  • Sistema operativo:
    Mac OS X 10.5
Re:WebView - Come passare dati da script html al codice Android?!
« Risposta #3 il: 11 Marzo 2012, 18:00:56 CET »
0
Non ho ben compreso ciò che intendi fare.
Però se ho capito vuoi eseguire del codice JAVA in una pagina html attraverso comandi jAVASCRIPT?
Questo si può fare, è sufficiente richiamare nella pagina html attraverso il bridge di cui sopra una funzione presente nel codice JAVA (lato android per intenderci)  :D


Offline Tunarock

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire S
  • Sistema operativo:
    Windows Vista
Re:WebView - Come passare dati da script html al codice Android?!
« Risposta #4 il: 11 Marzo 2012, 18:11:11 CET »
0
cerco di spiegarmi un po meglio:

quello che si può fare è:

-data una funzione scritta in Java, richiamarla ed eseguirla tramite codice Javascript

quello che forse non si può fare e che sto cercando di capire e l'esatto contrario:

-data una funzione scritta in Javascript, richiamarla ed eseguirla tramite codice Java

per la precisione le funzioni da richiamare sono contenute negli appositi file js di una pagina html

è possibile? come si potrebbe aggirare?
"Quando fai le cose per bene, nessuno sospetterà che tu abbia fatto realmente qualcosa"

Offline MariFio

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google ideos
  • Sistema operativo:
    Mac OS X 10.5
Re:WebView - Come passare dati da script html al codice Android?!
« Risposta #5 il: 11 Marzo 2012, 18:15:01 CET »
0
mmm ho capito, nel mio caso non ne ho mai avuto esperienza, in realtà non ne ho mai avuto necessità.
cerco di informarmi e nel caso ti aggiorno  8-)
Ovviamente anche tu se riesci a fare qualche cosa posta :-)

saluti
MF