【发布时间】:2014-04-29 22:43:46
【问题描述】:
我尝试从 html 文件调用 java 函数,但我不能。
我试图在我的 javascriptInterface 类上添加一个线程,但应用程序崩溃了。 (空指针)
我知道当 javascript 调用 java 函数时,它不会在同一个线程上运行。
javascript和java之间的通信应该如何进行?
我什至在 javascriptInterface 上也无能为力。即使在 javascriptInterface 上,我也无法调用函数
这是我的代码:
javascriptInterface.java
public class javascriptInterface {
Context mContext;
WebView webView;
javascriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void getTextMenuBarJS(String text){
webView.getTextMenuBar(i,text);
}
}
webview.java
公共类 WebView 扩展 Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
webViewContent.setWebChromeClient(new WebChromeClient(){});
webViewContent.loadUrl(JsonParsing.jsonObjectMap.get("path"));
webViewContent.addJavascriptInterface(new javascriptInterface(this), "Android");
btnSimple = (Button)this.findViewById(R.id.btnSimple);
btnSimple.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
webView.loadUrl("" +
"javascript:" +
"(function() {" +
"var NumberChildrenMenuBar = document.getElementById('menubar').childElementCount;"+
"var menubar = document.getElementById('menubar');"+
"var MenuHTMLContent;"+
"for(var i=0; i<NumberChildrenMenuBar;i++){MenuHTMLContent = menubar.children[i].outerHTML; window.Android.getHTMLMenuBarJS(i,MenuHTMLContent);}"+
"})();");
}
});
}
public void getTextMenuBar(final int i,final String text){
runOnUiThread(new Runnable() {
public void run() {
//load a function
}
});
}
这是我一直遇到的错误:
04-29 15:25:02.030: E/AndroidRuntime(27323): FATAL EXCEPTION: main
04-29 15:25:02.030: E/AndroidRuntime(27323): java.lang.NullPointerException
04-29 15:25:02.030: E/AndroidRuntime(27323): at com. ... . ... .javascriptInterface$2.run(javascriptInterface.java:44)
04-29 15:25:02.030: E/AndroidRuntime(27323): at android.os.Handler.handleCallback(Handler.java:733)
04-29 15:25:02.030: E/AndroidRuntime(27323): at android.os.Handler.dispatchMessage(Handler.java:95)
04-29 15:25:02.030: E/AndroidRuntime(27323): at android.os.Looper.loop(Looper.java:136)
04-29 15:25:02.030: E/AndroidRuntime(27323): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-29 15:25:02.030: E/AndroidRuntime(27323): at java.lang.reflect.Method.invokeNative(Native Method)
04-29 15:25:02.030: E/AndroidRuntime(27323): at java.lang.reflect.Method.invoke(Method.java:515)
04-29 15:25:02.030: E/AndroidRuntime(27323): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-29 15:25:02.030: E/AndroidRuntime(27323): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-29 15:25:02.030: E/AndroidRuntime(27323): at dalvik.system.NativeStart.main(Native Method)
【问题讨论】: