所以我知道還有其他文章解決同一個問題,我想我已經跟着他們去信,但唉,無濟於事。我試圖學習如何讓我的應用程序與JavaScript交互。我只是想能夠從我的JavaScript返回一個值到我的活動。
這裏是我的活動:Android-使用addJavaScriptInterface從Javascript返回一個值
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包含我要運行的JavaScript加載HTML文件:
<!DOCTYPE html>
<html>
<head>
<script language="javascript">
accessor.setValue('Hello!');
</script>
</head>
<body>
<h1>Testing</h1>
</body>
</html>
這是行不通的。當我運行代碼「Log.d(」YO!「,mString);」取消註釋我得到一個空指針異常,這意味着JavaScript從未爲mString賦值。我究竟做錯了什麼?
你運行了一個問題? – 2011-03-15 16:11:01
哦,傻我。是的,我遇到了問題。當「Log.d(」YO!「,mString)」行被取消註釋時,我得到一個NullPointerException,這意味着mString從來沒有被賦值,這意味着javascript與java的綁定失敗。所以我做錯了什麼? – aamiri 2011-03-15 16:28:51