我写了一个很简单的程序,有两个html文件,启动程序先用webview调用第一个html,代码 browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(loadWidget, "loadWidget");
browser.requestFocus();
browser.loadUrl("file:///android_asset/loader.html");
然后点击页面上一个按钮,想跳转到第二个html文件的界面 public class Loader
{
public void ChooseW2load(String str)
{
Toast.makeText(getApplicationContext(), str, 1).show();
browser.loadUrl("file:///android_asset/"+str+".html");
}
}下面是启动时的html代码<html>
<head>
<title>Android_Passing_HTML_JS</title> <head>
<script language="javascript">
function talkBack2Android() {
loadWidget.ChooseW2load(document.getElementById("myText").value);}
</script>
</head>
<body>
<h1>Webkit Browser</h1>
<p> Enter some data here <input type="text" id="myText" />
<p> <input type="button" onclick= "talkBack2Android()" value="Load">
</body>
</html>
这个程序在2.1上跑都没有问题,到2.2 和2.3上是就报错了,跳转的时候就意外停止了,报错: ERROR/AndroidRuntime(776): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
菜鸟急求大神们帮助!!!
browser.addJavascriptInterface(loadWidget, "loadWidget");
browser.requestFocus();
browser.loadUrl("file:///android_asset/loader.html");
然后点击页面上一个按钮,想跳转到第二个html文件的界面 public class Loader
{
public void ChooseW2load(String str)
{
Toast.makeText(getApplicationContext(), str, 1).show();
browser.loadUrl("file:///android_asset/"+str+".html");
}
}下面是启动时的html代码<html>
<head>
<title>Android_Passing_HTML_JS</title> <head>
<script language="javascript">
function talkBack2Android() {
loadWidget.ChooseW2load(document.getElementById("myText").value);}
</script>
</head>
<body>
<h1>Webkit Browser</h1>
<p> Enter some data here <input type="text" id="myText" />
<p> <input type="button" onclick= "talkBack2Android()" value="Load">
</body>
</html>
这个程序在2.1上跑都没有问题,到2.2 和2.3上是就报错了,跳转的时候就意外停止了,报错: ERROR/AndroidRuntime(776): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
菜鸟急求大神们帮助!!!
建议你起一个handler通过发消息来更新界面。
界面的更新必须在mainthread才可以操作。
可是为什么这个在2.1里可以运行呢,请教下怎么起handler发消息更新界面,本人菜鸟 不甚感激啊!!
public class Loader
{
public void ChooseW2load(String str)
{
启动一个线程把下面二行代码放到线程里面就OK了
Toast.makeText(getApplicationContext(), str, 1).show();
browser.loadUrl("file:///android_asset/"+str+".html");
}
}
这样开启线程? public void ChooseW2load()
{
new Thread(new Runnable()
{
public void run()
{
Toast.makeText(getApplicationContext(),commonData, 1).show();
browser.loadUrl("file:///android_asset/"+commonData+".html");
}
}).start(); }
还是不对额