热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android之webview使用-处理404等错误

publicclassWebView_404extendsActivity{privatefinalStringHOMEPAGEhttp:www.ab
public class WebView_404 extends Activity { 
    private final String HOMEPAGE = "http://www.abchina.com";//请求的网站的主页 
    private WebView web; 
    private Handler handler = new Handler() { 
            @Override 
            public void handleMessage(Message msg) { 
                    if(msg.what==404) {//主页不存在 
                            //载入本地assets文件夹下面的错误提示页面404.html 
                            web.loadUrl("file:///android_asset/404.html"); 
                    } else { 
                            web.loadUrl(HOMEPAGE); 
                    } 
            } 
    }; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.main); 
            web = (WebView) findViewById(R.id.webview); 
            web.getSettings().setJavascriptEnabled(true); 
            web.setWebViewClient(new WebViewClient() { 
                    @Override 
                    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
                            if(url.startsWith("http://") && getRespStatus(url)==404) { 
                                    view.stopLoading(); 
                                    //载入本地assets文件夹下面的错误提示页面404.html 
                                    view.loadUrl("file:///android_asset/404.html"); 
                            } else { 
                                    view.loadUrl(url); 
                            } 
                            return true; 
                    } 
            }); 
            new Thread(new Runnable() { 
                    @Override 
                    public void run() { 
                            Message msg = new Message(); 
                            //此处判断主页是否存在,因为主页是通过loadUrl加载的, 
                            //此时不会执行shouldOverrideUrlLoading进行页面是否存在的判断 
                            //进入主页后,点主页里面的链接,链接到其他页面就一定会执行shouldOverrideUrlLoading方法了 
                            if(getRespStatus(HOMEPAGE)==404) { 
                                    msg.what = 404; 
                            } 
                            handler.sendMessage(msg); 
                    } 
            }).start(); 
    } 
    
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
            if(keyCode==KeyEvent.KEYCODE_BACK && web.canGoBack()) { 
                    web.goBack(); 
                    return false; 
            } 
            return super.onKeyDown(keyCode, event); 
    } 
    
    private int getRespStatus(String url) { 
            int status = -1; 
            try { 
                    HttpHead head = new HttpHead(url); 
                    HttpClient client = new DefaultHttpClient(); 
                    HttpResponse resp = client.execute(head); 
                    status = resp.getStatusLine().getStatusCode(); 
            } catch (IOException e) {} 
            return status; 
    } 
}



推荐阅读
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • iOS9中的WebKit 与 Safari带来的惊喜
    iOS9中的WebKit与Safari带来的惊喜-每个用过UIWebView的iOS开发者对其诸多的限制和有限的功能也深有感触。悻然,自iOS8推出WebKit框架后将改变这一窘境 ... [详细]
  • Android工程师最容易遇到4个瓶颈是什么?附带学习经验
    一些感悟穷人的一次失败,为了还债可能一辈子都翻不了身,为还债一辈子送外卖。你将不再会有精力去思考和投机。穷人的失败可能断送了他所有暴富的机遇和时间&# ... [详细]
author-avatar
阿尔及利亚奥兰叉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有