android编程使用webview控件时遇到的问题

自己用webview写了一个小程序,就是提供一个webview界面,打开固定的网址,提供前进、后退功能,发现如果打开的是网上的实际网址,一切正常但是一旦打开的是保存在本地... 自己用webview写了一个小程序,就是提供一个webview界面,打开固定的网址,提供前进、后退功能,发现如果打开的是网上的实际网址,一切正常
但是一旦打开的是保存在本地的网页,就会出异常,异常log如下:
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

源代码如下:
package com.MyBrowser.android;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

public class MyBrowserActivity extends Activity {
/** Called when the activity is first created. */
WebView wv;
Handler handler;
Button btnexit;
Button btnback;
Button btnforward;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

wv = (WebView)findViewById(R.id.webView1);
wv.getSettings().setJavaScriptEnabled(true);
wv.setScrollBarStyle(0);
wv.loadUrl("file:///sdcard/web/baidu.htm");《----------------这还是正确的,能够成功打开本地保存的baidu首页

btnexit = (Button)findViewById(R.id.exit);
btnback = (Button)findViewById(R.id.back);
btnforward = (Button)findViewById(R.id.forward);

wv.setWebViewClient(new WebViewClient()
{
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
Log.d("MyBrowserActivity","url: "+ url);
loadurl(view,url); 《---------这个地方会报错
return true;
}
});
btnback.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v) {
wv.goBack();
}
});

btnforward.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v) {
wv.goForward();
}
});

btnexit.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v) {
finish();
}
});
}

public void loadurl(final WebView view,final String url){
new Thread(){
public void run(){
view.loadUrl(url);
}
}.start();

}
}
展开
 我来答
不辣mol
2012-03-12 · 超过19用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:32.4万
展开全部
Only the original thread that created a view hierarchy can touch its views.
这句话的意思是只有创建这个view的线程才可以操控它
你在loadurl方法里使用新的线程来操作webview,这个就会报错
loadurl方法里不用线程就行了应该
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小旋风mcgrady
2012-03-12
知道答主
回答量:4
采纳率:0%
帮助的人:6405
展开全部
你是不是没有给上网的权限啊?在Androidmanifest.xml文件中添加
<uses-permission android:name="android.permission.INTERNET" /> </manifest>

或者是设置一下读取网页的方式,先读缓存,缓存没有就联网
web.getSettings().setCacheMode(WebSettings. LOAD_CACHE_ELSE_NETWORK);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Crazy冫火
2012-03-14 · TA获得超过124个赞
知道答主
回答量:286
采纳率:100%
帮助的人:173万
展开全部
所有有关于Activity显示的操作只能在UI线程里
wv.setWebViewClient(new WebViewClient()
{
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
Log.d("MyBrowserActivity","url: "+ url);
loadurl(view,url); 《---------这个地方会报错
看最上面的那句~你在里面建立了一个匿名内部类了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bluelyc
2012-03-12 · 超过14用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:46.2万
展开全部
百度一下呗。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2012-03-12 · TA获得超过890个赞
知道小有建树答主
回答量:318
采纳率:0%
帮助的人:425万
展开全部
把你报错的地方的WebViewClient匿名内部类实现,改成一个单独的子类。
然后set。再试试。
明白我的意思不?
追问
比较白,还有些不明白。
要是这个问题,为什么打开的如果不是本地路径就没有问题,比如我打开的是http://www.baidu.com。如果打开后在点击里面的其他链接都能正常打开,不会报错。
另外你说的怎么改不太明白,能帮我改好吗?
追答
那把你的布局文件main.xml发一下吧。我好给你改~
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式