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

WebView加载网页加载资源总结MD

Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱
MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

WebView 加载网页 加载资源 总结 MD


目录

目录
WebView 加载数据的几种方法
loadData
使用说明
加载中文注意事项
loadDataWithBaseURL
使用说明
baseUrl的用法解析
loadUrl
postUrl
evaluateJavascript
加载各种类型的资源方法总结
一个完整的案例
Java 代码
参考HTML代码

WebView 加载数据的几种方法

demo

loadData

使用 loadUrl 不但浪费流量,而且加载起来也慢,所以可以将页面提前写好放到项目中,这样就可以用 loadData 更快的加载页面,用户体验会好些。

void loadData(String data, String mimeType, String encoding)
  • String data : a String of data in the given encoding
  • String mimeType : the MIME type of the data, e.g. 'text/html'
  • String encoding : the encoding of the data

使用说明

Loads the given data into this WebView using a 'data' scheme URL.
使用 'data' 方案 URL 将给定的数据加载到此WebView中。

Note that Javascript's same origin policy means that script running in a page loaded using this method will be unable to access content loaded using any scheme other than 'data', including 'http(s)'.
请注意,Javascript的"同源策略"意味着,在使用此方法加载的页面中运行的脚本,将无法访问使用除了使用 data方案 之外的任何内容,包括http。


To avoid this restriction, use loadDataWithBaseURL() with an appropriate base URL.
为避免此限制,请使用带有适当的base URL的loadDataWithBaseURL()方法。

The encoding parameter specifies whether the data is base64 or URL encoded. If the data is base64 encoded, the value of the encoding parameter must be 'base64'.
encoding参数用于指定数据是否是采用base64编码或URL编码。如果数据为base64编码,则编码参数的值必须为'base64'。

For all other values of the parameter, including null, it is assumed that the data uses ASCII encoding for octets inside the range of safe URL characters and use the standard %xx hex encoding of URLs for octets outside that range.
对于此参数的其他所有可能值,包括null,假定数据在安全URL字符范围内使用八位字节的ASCII编码,并且,在此范围以外的字节使用标准的 %xx 十六进制编码的八位字节的URL。

For example, '#', '%', '\', '?' should be replaced by %23, %25, %27, %3f respectively.
例如, '#', '%', '\', '?'应分别由%23,%25,%27,%3f代替。


The 'data' scheme URL formed by this method uses the default US-ASCII charset.
由此方法形成的'data' 方案 URL使用默认的US-ASCII字符集。

If you need to set a different charset, you should form a 'data' scheme URL which explicitly specifies a charset parameter in the mediatype portion of the URL and call loadUrl(String) instead.
如果需要设置不同的字符集,则应该形成一个'data' 方案 URL,它 显式 地在URL的 mediatype 部分 指定 一个charset 参数,或者也可以通过调用loadUrl代替。

Note that the charset obtained from the mediatype portion of a data URL always overrides that specified in the HTML or XML document itself.
请注意,从数据URL的 mediatype部分 获取的字符集,总是覆盖HTML或XML文档本身指定的字符集。

加载中文注意事项

在使用 loadData 方法时,如果按照官网文档样式去写,当出现中文时中文部分会出现乱码,即使指定“utf-8”、“gbk”、“gb2312”也都一样。

String time = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss SSS", Locale.getDefault()).format(new Date());
String data = "你好:包青天 

请登录" + "

" + time;

错误方式一:

webview.loadData(data, "text/html", "UTF8");

如果baseUrl没有指定,那么这两张图片将显示不出来,因为这里两个图片的地址是相对路径,不指定baseUrl时根本找不到这两张图片。

loadUrl

void loadUrl(String url) Loads the given URL.
void loadUrl(String url, Map additionalHttpHeaders) Loads the given URL with the specified additional HTTP headers.

Map: the additional headers to be used in the HTTP request for this URL, specified as a map from name to value.
要在此URL的HTTP请求中使用的附加的headers,指定为从name到value的映射。

Note that if this map contains any of the headers that are set by default by this WebView, such as those controlling caching, accept types or the User-Agent, their values may be overridden by this WebView's defaults.
请注意,如果此映射包含此WebView默认设置的任何headers,例如控制缓存,可接受的类型,或User-Agent,那么这些设定的值可能会被该WebView的默认值所覆盖。

postUrl

void postUrl (String url, byte[] postData)

Loads the URL with postData using "POST" method into this WebView.
If url is not a network URL, it will be loaded with loadUrl(String) instead, ignoring the postData param.

String url = "http://tapi.95xiu.com/app/pay/weixinmiao/user_pay.php" ;
String postData= "uid=" + uid + "&session_id=" + session_id + "&total_fee="+total_fee;
webview.postUrl(url , EncodingUtils.getBytes(postData, "base64"));

evaluateJavascript

void evaluateJavascript (String script, ValueCallback resultCallback)

Asynchronously evaluates Javascript in the context of the currently displayed page. If non-null, |resultCallback| will be invoked with any result returned from that execution. This method must be called on the UI thread and the callback will be made on the UI thread.
在当前显示页面的上下文中异步执行Javascript。 如果非空,| resultCallback | 将使用从该执行返回的任何结果来调用它。 必须在UI线程上调用此方法,并在UI线程上进行回调。

加载各种类型的资源方法总结

加载assets下的资源

webView.loadUrl("file:///android_asset/" + "h5/test.html");

String data = "包青天

" + "

" + time; webView.loadDataWithBaseURL("file:///android_asset/", data, "text/html", "utf-8", null);

加载 res/drawable 或 res/mipmap 或 res/raw 下的资源

webView.loadUrl("file:///android_res/" + "drawable/ic_launcher");
webView.loadUrl("file:///android_res/" + "mipmap/ic_launcher");
webView.loadUrl("file:///android_res/" + "raw/test");

data = "包青天

" + "

" + time; webView.loadDataWithBaseURL("file:///android_res/", data, "text/html", "utf-8", null);

加载SD卡中的资源

String FILE_BASE_SIMPLE = "file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+ "/";//【file:///sdcard/】
webView.loadUrl(FILE_BASE_SIMPLE + "test.html");//【file:///storage/emulated/0/test.html】或【file:///sdcard/test.html】

data = "包青天

" + "

" + time; webView.loadDataWithBaseURL(FILE_BASE_SIMPLE, data, "text/html", "utf-8", null);

一个完整的案例

演示load不同资源的方法

Java 代码

public class LoadUrl_DataActivity extends ListActivity {
    private WebView webView;
    private boolean b;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String[] array = {"0、loadData时中文乱码问题,错误解决方案",
                "1、loadData时中文乱码问题,正确解决方案",
                "2、演示loadDataWithBaseURL方法中,参数baseUrl的作用",
                "3、加载assets下的资源",
                "4、加载res/drawable下的资源",
                "5、加载res/raw下的资源",
                "6、加载SD卡中的资源",
                "7、加载网页http资源",};
        setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, new ArrayList<>(Arrays.asList(array))));
        webView = new WebView(this);
        getListView().addFooterView(webView);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        String time = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss SSS", Locale.getDefault()).format(new Date());
        String data = "包青天

百度" + "

" + time; b = !b; Toast.makeText(this, "" + b, Toast.LENGTH_SHORT).show(); switch (position) { case 0://loadData时中文乱码问题,错误解决方案 String encoding = b ? "UTF8" : "base64";//encoding参数的值,设置为null或其他任何值(除了"base64")都是没有影响的 webView.loadData(data, "text/html", encoding);//如果不是采用的base64编码,那么绝对不可以设置为base64 break; case 1://loadData时中文乱码问题,正确解决方案 if (b) webView.loadData(data, "text/html; charset=UTF-8", "encoding可以是base64之外的任何内容"); else webView.loadDataWithBaseURL(null, data, "text/html", "utf-8", null); break; case 2://演示loadDataWithBaseURL方法中,参数baseUrl的作用 String baseUrl = b ? null : "http://img.mmjpg.com";//不设置baseUrl时,data2里面的两张图片将显示不出来 String data2 = "这里两个图片的地址是相对路径

"; webView.loadDataWithBaseURL(baseUrl, data2, "text/html", "utf-8", null); break; case 3://加载assets下的资源 data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.ASSET_BASE + "h5/test.html"); else webView.loadDataWithBaseURL(URLUtils.ASSET_BASE, data, "text/html", "utf-8", null); break; case 4://加载res/drawable 或 res/mipmap下的资源。不会区分drawable与drawable-***,但会区分drawable和mipmap data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.RESOURCE_BASE + "mipmap/ic_launcher");//建议直接省略文件后缀名 else webView.loadDataWithBaseURL(URLUtils.RESOURCE_BASE, data, "text/html", "utf-8", null); break; case 5://加载res/raw下的资源,和res/drawable一样,都属于Resources资源文件 data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.RESOURCE_BASE + "raw/test"); else webView.loadDataWithBaseURL(URLUtils.RESOURCE_BASE, data, "text/html", "utf-8", null); break; case 6://加载SD卡中的资源。注意,如果提示【net::ERR_ACCESS_DENIED】,是因为没有申请权限 data = "包青天

" + "

" + time; if (b) webView.loadUrl(URLUtils.FILE_BASE_SIMPLE + "test.html"); else webView.loadDataWithBaseURL(URLUtils.FILE_BASE_SIMPLE, data, "text/html", "utf-8", null); break; case 7://加载网页http资源 webView.loadUrl(b ? "http://www.meituba.com/" : "http://img.mmjpg.com/2017/936/5.jpg"); break; } } }

参考HTML代码




    
    
    
    


加载资源

res下的图片 src='file:///android_res/drawable/ic_launcher'

assets下的图片 src='file:///android_asset/icon.jpg'

SD卡下的图片 src='file:///sdcard/icon.png'

电话  短信  邮件

2017-7-27


推荐阅读
  • 安卓开发入门!BAT大厂面试基础题集合,顺利通过阿里Android岗面试
    其实不是Android不行了,而是你跟不上了我的很多读者都在反馈说,现在一个岗位可以收到的简历数,是前几年的几倍。我们必须承认ÿ ... [详细]
  • 资源:吊炸天!74款APP完整源码!android界面中点击输入框时弹出输入法如果输入框在底部会出现输入法遮挡输入内容的问题解决办法设置activity的windowsoftinpu ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
  • Imdevelopinganappwhichneedstogetmusicfilebystreamingforplayinglive.我正在开发一个应用程序,需要通过流 ... [详细]
  • webui之常用js操作(webui界面是什么)
    本文目录一览:1、web前端开发需要掌握的几个必备技术 ... [详细]
  • 01mui框架使用概述
    1MUI概述1.1MUI诞生背景?性能和体验的差距,一直是手机APP开发者放弃HTML5的首要原因。浏览器默认控件样式又少又丑,制作一 ... [详细]
  • Android Studio中的IBM MobileFirst Compile问题 - IBM MobileFirst Compile in Android Studio Issue
    IbuiltaMultipageapplicationbyusingIBMMobileFirst,accordingto据我所知,我使用IBMMobileFirst构建了一个 ... [详细]
  • 来自微信官方:微信支付跨平台软件架构首次曝光
    大纲背景线上效果指标什么是软件架构为什么需要软件架构从零到一构建支付跨平台软件架构1.抽象业务流程2.加入路由机制3.管理网络请求4.规范数据传递总结背景作为一个重要业务ÿ ... [详细]
  • salesforce lightning零基础学习(三)  表达式的!(绑定表达式)与 #(非绑定表达式)
    在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{ ... [详细]
author-avatar
单纯只是一2502904797
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有