2011-03-15 7 views
6

से एक मूल्य वापस करने के लिए addJavaScriptInterface का उपयोग करके, इसलिए मुझे पता है कि एक ही मुद्दे को संबोधित करने वाली अन्य पोस्ट हैं, और मुझे लगता है कि मैंने उन्हें पत्र में पालन किया है, लेकिन इसका कोई फायदा नहीं हुआ है। मैं जावास्क्रिप्ट के साथ बातचीत करने के लिए अपने ऐप को कैसे प्राप्त करना सीखने की कोशिश कर रहा हूं। मैं सिर्फ अपनी जावास्क्रिप्ट से अपनी गतिविधि में एक मूल्य वापस करने में सक्षम होना चाहता हूं।एंड्रॉइड- जावास्क्रिप्ट

public class JSExample extends Activity { 
WebView mWebView; 
String mString; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mWebView = (WebView)findViewById(R.id.mWebView); 
    mWebView.addJavascriptInterface(new ClsAccessor(), "accessor"); 
    String html = getAssetsContent("jsinterface.html"); 

    mWebView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null); 

// Log.d("YO!", mString);   
} 

private String getAssetsContent(String filename){ 
    ..... 
} 

private void closeStream(BufferedReader stream) { 
    ..... 
} 

class ClsAccessor{ 
    public void setValue(String value){ 
     JSExample.this.mString = value; 
    } 
} 

यहाँ एचटीएमएल मेरी WebView कि जावास्क्रिप्ट मैं चलाने के लिए चाहते हैं द्वारा लोड फ़ाइल है::

<!DOCTYPE html> 

<html> 
<head> 
    <script language="javascript"> 
     accessor.setValue('Hello!'); 
    </script> 
</head> 
<body> 
<h1>Testing</h1> 
</body> 
</html> 

यह काम नहीं करता
यहाँ मेरी गतिविधि है। जब मैं "Log.d (" YO! ", MString) के साथ कोड चलाता हूं;" असम्बद्ध मुझे एक शून्य सूचक अपवाद मिलता है, जिसका अर्थ है कि जावास्क्रिप्ट ने कभी भी mString के लिए कोई मान निर्दिष्ट नहीं किया है। मैं क्या गलत कर रहा हूं?

+0

आप एक समस्या में चला रहे हैं? –

+0

ओह मूर्ख मुझे। हाँ मैं एक समस्या में भाग रहा हूँ। जब लाइन "Log.d (" YO! ", mString)" असम्बद्ध है मुझे एक NullPointerException मिलता है, जिसका अर्थ है कि mString को कभी भी मान निर्दिष्ट नहीं किया गया था, जिसका अर्थ जावा में जावास्क्रिप्ट का बाध्यकारी विफल रहा। तो मैं क्या गलत हूं? – aamiri

उत्तर

3

यह सही नहीं हो सकता है, मैं दोबारा जांच करने के लिए है, लेकिन यह हो सकता है कारण के संदर्भ में खो दिया जा रहा ..

अपने ClsAccessor संदर्भ एक सदस्य स्तर एक बनाने का प्रयास करें ..

public class JSExample extends Activity { 
    ... 
    ClsAccessor _accessor = new ClsAccessor(); 
    ... 
    public void onCreate(Bundle savedInstanceState) { 
     ... 
     mWebView.addJavascriptInterface(_accessor, "accessor"); 
     ... 

यदि आप लाइन द्वारा लाइन डीबग करते हैं तो setValue() कभी भी प्रबंधित कोड में कॉल किया जाता है?

इसके लिए क्या लायक है, मेरे पास कोड है जो मैंने ऊपर वर्णित किया है और स्क्रिप्ट प्रबंधित प्रबंधित इंटरफ़ेस ठीक काम करता है, हालांकि मैं वर्तमान में परीक्षण करने और कक्षा के संदर्भ में नहीं देखने के लिए स्थिति में नहीं हूं भी काम करता है

0

मैं इसे अपने वेबव्यू क्लास में ऑनलोडोडसोर्स का उपयोग करके करता हूं।

एचटीएमएल पेज:

<html> 
<head> 
function Submit(){ 

     var username = $('#username').val(); 
     var urlNew = 'processing.php'; 
     urlNew = urlNew + '?' + 'username=' + username; 
     $('#submit').attr('href', urlNew); 

     return true; 
    } 
</head> 
<body> 
    <form> 
     <input id="username" name="username" type="text" /> 
     <a href="" id="submit" onclick="return Submit();" ><img src="images/button.png" /></a> 
    </form> 
</body> 
</html> 

तो फिर मेरी onLoadResource में मुझे लगता है कि यूआरएल के लिए सुनने: ऐसा कई कारणों मैं था यह यह करने के लिए थे

public void onLoadResource(WebView view, String url) 
     { 
      if(url.contains("http://domain.com/processing.php")){ 

//process the url and suck out the data 

} 

यह तुम क्या जरूरत है नहीं हो सकता है लेकिन जिस तरह से यह पता लगाया कि यह आपकी मदद कर सकता है। यह भी ध्यान रखें कि मैंने फॉर्म सबमिट नहीं किया है, मैंने <a> सबमिट किया है, ऐसा इसलिए है क्योंकि ऑनलोडोडसोर्स फॉर्म सबमिट नहीं करेगा।

संपादित करें: This might help.

+0

जब मैं इस स्निपेट – Rizvan

+0

का उपयोग करता हूं तो मैं शून्य हो रहा हूं, जब मैं इस निजी स्निपेट पर ऑनलोड लोड करता हूं YourWebViewClient WebViewClient {} को बढ़ाता है? – bMon

2

अपने वेब दृश्य पर जावास्क्रिप्ट को सक्षम करने का प्रयास करें:

mWebview.getSettings().setJavaScriptEnabled(true); 
संबंधित मुद्दे