`
libo19881179
  • 浏览: 270364 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【BUG解决】WebView三个方法区别~解决乱码问题!

阅读更多

最近做WebView加载本地html,发现了网上说的utf-8乱码的问题。解决也很简单,这里有篇很不错的文章写的很详细。偷懒拿来借鉴~!

 

 

其实我发现这不管是在线还是离线显示都可以使用LoadUrl方法!联网时好像是默认utf-8,离线读取本地时需要设置默认编码!如果图片无法离线显示 参考:  http://androidturing.iteye.com/blog/1280946 

 

在网上看了许多关于WebView 的例子。但当自己做起来时,总是有些差别,是另一种体会。这节我就以 模拟器为2.1 为例来讲。

   WebView 主要调用三个方法:LoadUrl、LoadData、LoadDataWithBaseURL。

     1、LoadUrl        直接加载网页、图片并显示。(本地或是网络上的网页、图片、gif)

注意!要提前设置编码:webSettings.setDefaultTextEncodingName("UTF-8");

 

     2、LoadData     显示文字与图片内容 (模拟器1.5、1.6)

     3、LoadDataWithBase  显示文字与图片内容(支持多个模拟器版本)

下面来看看代码片段:

 

Java代码 
  1. package com.webviewdemo;  
  2.   
  3. import java.net.URLEncoder;  
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. import android.webkit.WebView;  
  7.   
  8. public class WebViewDemo extends Activity {  
  9.   
  10.   private WebView     MyWebView;  
  11.   static final String mimeType = "text/html";  
  12.   static final String encoding = "utf-8";  
  13.   
  14.   /** Called when the activity is first created. */  
  15.   @Override  
  16.   public void onCreate(Bundle savedInstanceState) {  
  17.     super.onCreate(savedInstanceState);  
  18.     setContentView(R.layout.main);  
  19.     //  
  20.     MyWebView = (WebView) findViewById(R.id.MyWebview);  
  21.     // this.webHtml();  
  22.     // this.webImage();  
  23.     // this.localHtmlZh();  
  24.     // this.localImage();  
  25.     // this.localHtml();  
  26.     this.localHtmlImage();  
  27.   }  
  28.   
  29.   /** 
  30.    * 直接网页显示 
  31.    */  
  32.   private void webHtml() {  
  33.   
  34.     try {  
  35.       MyWebView.loadUrl("http://www.google.com");  
  36.     } catch (Exception ex) {  
  37.       ex.printStackTrace();  
  38.     }  
  39.   }  
  40.   
  41.   /** 
  42.    * 直接网络图片显示 
  43.    */  
  44.   private void webImage() {  
  45.     try {  
  46.       MyWebView .loadUrl("http://www.google.com.hk/intl/zh-CN/images/logo_cn.gif");  
  47.     } catch (Exception ex) {  
  48.       ex.printStackTrace();  
  49.     }  
  50.   }  
  51.   
  52.   /** 
  53.    * 中文显示 
  54.    */  
  55.   private void localHtmlZh() {  
  56.     try {  
  57.       String data = "<html>在模拟器 2.1 上测试</html>";  
  58.       // utf-8编码处理(在SDK1.5模拟器和真实设备上都将出现乱码,SDK1.6上能正常显示)  
  59.       // MyWebView.loadData(data, mimeType, encoding);  
  60.       // 对数据进行编码处理(SDK1.5版本)  
  61.       MyWebView.loadData(URLEncoder.encode(data, encoding), mimeType, encoding);  
  62.       // MyWebView.loadDataWithBaseURL(null, data, mimeType, encoding, null);  
  63.   
  64.     } catch (Exception ex) {  
  65.       ex.printStackTrace();  
  66.     }  
  67.   }  
  68.   
  69.   /** 
  70.    * 显示本地图片文件 
  71.    */  
  72.   private void localImage() {  
  73.     try {  
  74.       // 本地文件处理  
  75.       String str = "file:///android_asset/icon.png";  
  76.       MyWebView.loadUrl(str);  
  77.     } catch (Exception ex) {  
  78.       ex.printStackTrace();  
  79.     }  
  80.   }  
  81.   
  82.   /** 
  83.    * 显示本地网页文件 
  84.    */  
  85.   private void localHtml() {  
  86.     try {  
  87.       // 本地文件处理(如果文件名中有空格需要用+来替代)  
  88.       MyWebView.loadUrl("file:///android_asset/test.html");  
  89.     } catch (Exception ex) {  
  90.       ex.printStackTrace();  
  91.     }  
  92.   }  
  93.   
  94.   /** 
  95.    * 显示本地图片和文字混合的Html内容 
  96.    */  
  97.   private void localHtmlImage() {  
  98.     try {  
  99.       String data = "<HTML>在模拟器 2.1 上测试,这是<IMG src=\"APK'>file:///android_asset/igg.jpg\"/>APK里的图片";  
  100.       // SDK1.5本地文件处理(不能显示图片)  
  101.       //MyWebView.loadData(URLEncoder.encode(data, encoding), mimeType, encoding);  
  102.       // SDK1.6及以后版本  
  103.       //MyWebView.loadData(data, mimeType, encoding);  
  104.       // 本地文件处理(能显示图片)  
  105.       MyWebView.loadDataWithBaseURL(null, data, mimeType, encoding, null);  
  106.     } catch (Exception ex) {  
  107.       ex.printStackTrace();  
  108.     }  
  109.   }  
  110. }  

 

运行 localHtmlImage(...) 这个方法的结果:


在上面的所有方法中,模拟器2.1下 调用 LoadData 方法总是出现乱码。我想应该是2.1已经不在用它了吧。直接用LoadDataWithBaseURL 方法最简单,不再牵涉编码的转换。

其实我发现这不管是在线还是离线显示都可以使用LoadUrl方法!联网是默认utf-8,离线读取本地时需要设置默认编码!

本地url写法:

手机本地文件: "file:///data/data/。。。“

SD: "file:///mnt/sdcard/。。。“

 

如果图片无法离线显示 参考:  http://androidturing.iteye.com/blog/1280946

 

 

 

分享到:
评论

相关推荐

    Android webview 内存泄露的解决方法

    Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递...

    解决webview 第二次调用loadUrl页面不刷新的问题

    以下方法可以成功! @Override public void onClick(View view) { webview.loadUrl(url); webview.loadUrl( [removed][removed].reload( true ) ); } 亲测管用! 补充知识:WebView.loadUrl使用误区 当使用...

    fiddler中的响应端的webview显示乱码

    请问怎么解决这个乱码问题

    Android 解决WebView调用loadData()方法显示乱码的问题

    **解决WebView调用loadData()方法的乱码问题** 当使用`loadData()`方法加载包含非ASCII字符的数据时,必须指定正确的字符编码。`loadData()`方法接收三个参数:数据(data)、MIME类型和编码。正确的调用方式如下:...

    使用webview做的浏览器~android基础学习

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现一个基本的浏览器功能。本篇文章将深入探讨如何使用WebView来构建一个简单的浏览器,并结合Android基础知识进行学习。 ...

    webView解决内存泄漏

    在Android开发中,WebView是一...综上所述,解决WebView内存泄漏问题需要关注其生命周期管理、缓存策略、JavaScript交互方式等多个方面。遵循最佳实践并持续优化,可以有效防止内存泄漏,提升应用的稳定性和用户体验。

    android webview input=file 失效解决方案

    通过自定义`WebChromeClient`、请求读取权限、实现文件选择器和使用`FileProvider`,可以解决这个问题,使用户能够正常在Webview中上传文件。这些步骤是Android开发者在处理Webview与本地文件交互时必须掌握的关键...

    webview解决兼容问题封装ProgressWebView

    总之,`ProgressWebView`是一个优化过的`WebView`实现,旨在解决兼容性问题,提供更好的用户体验。通过封装,我们可以更好地控制加载过程,提高加载速度,增强对HTML5的支持,并确保在各种Android设备上稳定运行。这...

    webview与javascript交互,并解决编码问题

    最后,提供的`WebViewDemo`可能包含一个示例应用,演示了WebView与JavaScript的交互以及中文编码问题的解决方案。通过分析和学习这个示例,你可以更好地理解这些知识点,并应用到自己的项目中。 总结起来,WebView...

    Android-解决在webview中input标签type="file"不能使用的问题

    在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中嵌入网页内容,提供了一种混合式开发的解决方案。然而,在实际使用中,我们可能会遇到一些问题,比如在WebView中使用`&lt;input type="file"&gt;`...

    Android webView安全漏洞解决

    Android webView安全漏洞解决 1. 解决CVE(通用漏洞与披露)中记录WebView的4个漏洞 2.解决 WebView File域同源策略绕过漏洞 3.解决 WebView 密码存储漏洞

    031.IOS的WebView自动拨号bug1

    本文将深入探讨一个特定的问题,即“iOS的WebView自动拨号bug1”,这个问题在iOS的不同版本中有所体现,特别是iOS 1至6之间。 这个bug主要涉及到WebView处理电话号码链接的方式。当用户在WebView中浏览含有电话号码...

    解决webView不支持网页,webViewinput type="file"上传功能

    为了解决这个问题,开发者需要实现一个自定义的文件选择器,并通过JavaScript接口与WebView进行通信。 1. **创建自定义文件选择器** - 在Android中,你可以创建一个`Intent`,启动系统的文件选择器,让用户选择...

    Android下WebView加载flash闪白屏问题解决方案源码

    为了解决WebView加载Flash时的白屏问题,可以采用以下几种方法: 1. 使用第三方库:例如,Photon Flash Player是一款适用于Android的开源Flash Player替代品。它提供了与原生Flash Player类似的API,可以在WebView...

    解决RN 的 webview 组件不支持android客户端上传图片文件问题

    本篇文章将深入探讨这个问题,并提供解决方案。 首先,我们要明白问题的根源。在Android系统中,原生的`WebView`组件支持文件选择器,但是React Native的Webview并不直接继承这个功能。当用户在Webview内尝试选择...

    android使用webview上传文件兼容问题解决支持5.0以上系统

    本文将深入探讨如何解决Android Webview中的文件上传兼容问题。 首先,我们需要了解在Android 5.0之前,文件上传通常是通过`&lt;input type="file"&gt;`标签实现的。但是,从Android 5.0开始,系统引入了更严格的权限管理...

    Webview播放网络视频并实现全屏显示,解决声音问题

    本教程将详细讲解如何使用WebView播放网络视频,并实现全屏显示,同时解决在5.0及以上系统上的声音问题以及全屏时的声音调整。 ### 1. WebView基础知识 首先,我们需要了解WebView的基本用法。在Android布局XML...

    android demo,webview_js(webview的js方法调用java方法)。

    在Android开发中,Webview是一个非常重要的组件,它允许我们加载和显示网页内容,同时还能与JavaScript进行交互。本示例“android demo,webview_js”着重展示了如何通过Webview实现JavaScript调用Java方法的功能。...

    Webview打开本地文件、图片选择的解决方案。版本兼容问题

    本文将详细讲解如何在WebView中正确地打开本地文件和实现图片选择功能,并解决版本兼容性问题。 首先,我们要理解WebView的基本用法。WebView通过`loadUrl()`方法加载HTML内容,可以是网络URL或者本地资源文件路径...

Global site tag (gtag.js) - Google Analytics