2010-11-22 9 views
0

kehrt ich bin mit Code im Anschluss an ein String-Variable in meiner JavaScript-Datei in Android zu extrahieren:addJavascriptInterface tut einem String-Wert android

Dieses mein JavaScript-Datei:

<script language="javascript"> 

EDIT: 
clsVariable = "vikrant"; 

function refuseClick(){ 
clsVariable = "vikrant"; 
refuse.performClick(); 
document.getElementById("no").value = "Refuse"; 
} 

</script> 

<button type="button" id="no" onClick="refuseClick();">Je refuse</button> 

</div> 
</body> 
</html> 

In meiner Android-Klasse I Ich schreibe folgende Methode auf einen Knopf klicken. Über diese Schaltfläche klicken Ereignis, das ich von JavaScript-Datei bin Aufruf:

refuse.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Log.v(LOG_TAG, "variable=" + clsVariable); //This shows me null 
} 
}); 
wbvw = (WebView) findViewById (R.id.webvw); 

wbvw.setWebViewClient(new HelloWebViewClient()); 
    wbvw.getSettings().setJavaScriptEnabled(true); 

    WebSettings ws = wbvw.getSettings(); 
    ws.setJavaScriptEnabled(true); 
    wbvw.addJavascriptInterface(clsVariable, "clsVariable"); 
    wbvw.loadUrl("http://www.sbc.co.in/projects/AndroidTest.html"); 
} 

Ich bin neu auf dieser Plattform sowie Javascripting.

Was mache ich falsch? Kann mir bitte jemand helfen?

Vielen Dank im Voraus.

Antwort

6

Es sieht so aus, als ob Sie das addJavascriptInterface() missbrauchen. Mit dieser Methode können Sie Java-Objekte für JavaScript verfügbar machen. Sie können dann Methoden des Objekts mit Javascript aufrufen und diese Aufrufe werden in 'echte' Java-Objekte übertragen. Zum Beispiel können Sie eine solche verschachtelte Klasse deklarieren, um Ihre Java-Feld zuzugreifen:

class ClsAccessor { 
    public void setValue(String value){ 
      YourOuterClassName.this.clsVariable = value; 
    } 
} 

Dann eine Instanz der Klasse in addJavascriptInterface() Methode übergeben:

wbvd.addJavaScriptInterface(new ClsAccessor(), "accessor"); 

Dann, um einen Wert einzustellen Ihr Klassenfeld benötigen Sie eine Methode setValue() auf accessor Objekt von Javascript aufrufen (zum Beispiel in auf Click-Handler):

accessor.setValue('vikrant'); 

, die in Aufruf von Java ‚führen werden setValue() 'und Ihre Feldvariable wird gesetzt.

Beachten Sie, dass Schnipsel nicht genau sein können, ich habe sie direkt von meinem Kopf eingeben :) Aber Sie sollten das Prinzip bekommen. Ich hoffe, das hilft.

+0

Ich habe es getan, aber bin immer noch nicht in der Lage, auf die Variable zuzugreifen. Das ist seltsam. Ich habe sogar versucht, diese Variable außerhalb einer der Funktionen zu setzen. Was ich versuche zu erreichen, ist, dass ich einen JavaScript-Variablenwert in meiner Android-Klasse lesen möchte. – neha

+0

Vielen Dank, Konstantin Burov, dass Sie sich die Zeit genommen haben, dies zu erklären. Jetzt verstehe ich, worum es geht. – neha

+0

Gern geschehen :) –

Verwandte Themen