webview向html传递参数

方式一  通过 cookie传参

         CookieSyncManager.createInstance(this);CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptCookie(true);cookieManager.setCookie(mNewsUrl, "uid=" + uid);cookieManager.setCookie(mNewsUrl, "imnewsId=" + id);CookieSyncManager.getInstance().sync();

这里是通过 cookie向html传递了uid  和 id 两个参数

不过需要注意的是 在设置了 cookie后,webview的一些功能可能会无法正常使用

这里使用到的mNewsUrl 就是要传参的页面

方式二 通过js传参

mHomeHeadImageWebView.loadUrl("javascript: homeHeadeImageData('" + uid + "," + id + "')");

这里是通过调用html页面的方法homeHeadeImageData(String str);方法,向页面传递了 uid 和id 这两个参数 ,不过页面接收到的是一个字符串,这里使用,分隔开的,

这个方法在使用的时候 最好是在页面加载完成后再进行调用,以防页面加载的时候 ,出现页面还没有初始化这个方法,造成传参失败的结果

private class MyWebViewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {mHomeHeadImageWebView.loadUrl(url);return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);HDLoadingFragmentDialog.hide();/*** 向页面传*/mHomeHeadImageWebView.loadUrl("javascript: homeHeadeImageData('" + uid + "," + id + "')");}@Overridepublic void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {}}

然后webView中进行使用

mHomeHeadImageWebView.setWebViewClient(new MyWebViewClient());

html与java通信,调用java中的方法

// 添加js交互接口类,并起别名 imagelistnermHomeHeadImageWebView.addJavascriptInterface(new ClinicalInterface(this), "clinicalQuestRestul");// js通信接口public class ClinicalInterface {private Context context;public ClinicalInterface(Context context) {this.context = context;}@JavascriptInterfacepublic void upLoadClinicalImage(final String deId, final String list) {handler.post(new Runnable() {@Overridepublic void run() {
             }});}
}

1. ClinicalInterface  是html通信调用的接口,html调用的方法全部在里面定义

2. 在ClinicalInterface  通信接口中调用的方法 在android4.2版本以上,必须添加注解 @JavascriptInterface 才可以生效,否则页面是无法调用这个方法的

3. 本例中的upLoadClinicalImage方法 是页面要调用 的方法,并且传递两个参数过来

4. 页面要调用此接口,使用的对象 是 别名 clinicalQuestRestul

webView加载的时候控制 控制台上面的输出内容

               /*** 控制在控制台上面输出的信息*/mHomeHeadImageWebView.setWebChromeClient(new WebChromeClient() {@Overridepublic boolean onJsAlert(WebView view, String url, String message, JsResult result) {return true;}@Overridepublic boolean onConsoleMessage(ConsoleMessage consoleMessage) {Log.d("clinical ", consoleMessage.message() + "from line" + consoleMessage.lineNumber() + "of"+ consoleMessage.sourceId());return true;}});

设置webview的缓存数据

 protected void initCommonFouncation(boolean b) {// 设置缓存的大小mHomeHeadImageWebView.getSettings().setAppCacheMaxSize(1024 * 10);//  设置缓存模式// 建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。if (isnetWork()) {mHomeHeadImageWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);// 优先使用缓存} else {mHomeHeadImageWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;// String cacheDirPath =// getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;// 设置数据库缓存路径mHomeHeadImageWebView.getSettings().setDatabasePath(cacheDirPath);// 设置 Application Caches 缓存目录mHomeHeadImageWebView.getSettings().setAppCachePath(cacheDirPath);// 开启 Application Caches 功能mHomeHeadImageWebView.getSettings().setAppCacheEnabled(true);mHomeHeadImageWebView.loadUrl(mNewsUrl);}

清除webview的缓存缓存数据

      public void clerWebviewCache() {if (mHomeHeadImageWebView != null) {mHomeHeadImageWebView.clearCache(true);mHomeHeadImageWebView.clearHistory();mHomeHeadImageWebView.clearFormData();}}/*** 清除WebView缓存*/public void clearWebViewCache() {// 清理Webview缓存数据库try {deleteDatabase("webview.db");deleteDatabase("webviewCache.db");} catch (Exception e) {e.printStackTrace();}// WebView 缓存文件File appCacheDir = new File(getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME);File webviewCacheDir = new File(getCacheDir().getAbsolutePath() + "/webviewCache");// 删除webview 缓存目录if (webviewCacheDir.exists()) {deleteFile(webviewCacheDir);}// 删除webview 缓存 缓存目录if (appCacheDir.exists()) {deleteFile(appCacheDir);}}/*** 递归删除 文件/文件夹* * @param file*/public void deleteFile(File file) {if (file.exists()) {if (file.isFile()) {file.delete();} else if (file.isDirectory()) {File files[] = file.listFiles();for (int i = 0; i < files.length; i++) {deleteFile(files[i]);}}file.delete();} else {}}
package com.administrator.interviewsummary;import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.os.Bundle;
import android.os.Message;
import android.view.InputEvent;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.webkit.ClientCertRequest;
import android.webkit.HttpAuthHandler;
import android.webkit.JsResult;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;/**** webview是基于webkit内核,它的运行效果与firefox上的一模一样* webview与js的双向交互才是android中的webview功能强大所在*/
public class MainActivity extends Activity {private WebView webview ;private ProgressDialog mProgressDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去掉标题栏requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);//实例化WebView对象webview = (WebView) findViewById(R.id.webview);//设置WebView属性,能够执行Javascript脚本WebSettings settings = webview.getSettings();//支持js脚本settings.setJavaScriptEnabled(true);//设置启动缓存settings.setAppCacheEnabled(true);//设置缓存的大小settings.setAppCacheMaxSize(1024 * 10);//设置缓存模式settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存//设置缓存,离线应用settings.setAppCacheEnabled(true) ;settings.setAppCacheMaxSize(1024 * 1024 * 8);settings.setCacheMode(WebSettings.LOAD_DEFAULT);//设置可以自动加载图片settings.setLoadsImagesAutomatically(true);//设置可以访问文件settings.setAllowFileAccess(true);//设置图片调整到适合webView的方法settings.setUseWideViewPort(false);//设置支持多窗口的settings.setSupportMultipleWindows(true);//支持缩放,设置成拖动放大缩小settings.setSupportZoom(true );settings.setBuiltInZoomControls(true) ;//支持内容从新布局settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//加载需要显示的网页webview.loadUrl("http://www.baidu.com/");//加载本地的html//webview.loadUrl("file:///android_asset/example.html");//点击链接留在当前的webview中进行数据的显示,而不是跳转到新的页面,重写这个方法webview.setWebViewClient(new WebViewClient() {//请求的是链接,当返回的是true时候,打开新的链接不会跳转到浏览器那边//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// return super.shouldOverrideUrlLoading(view, url);webview.loadUrl(url);return true;}//当开始载入页面的时候调用@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);//显示正在加载中的对话框mProgressDialog.show();}//当一个页面加载完成时候调用@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);//隐藏正在加载的圣诞框的提示信息mProgressDialog.dismiss();}//加载页面资源会调用,每加载一次就会调用一次@Overridepublic void onLoadResource(WebView view, String url) {super.onLoadResource(view, url);}@Overridepublic void onPageCommitVisible(WebView view, String url) {super.onPageCommitVisible(view, url);}@Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, String url) {return super.shouldInterceptRequest(view, url);}@Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {return super.shouldInterceptRequest(view, request);}@Overridepublic void onTooManyRedirects(WebView view, Message cancelMsg, Message continueMsg) {super.onTooManyRedirects(view, cancelMsg, continueMsg);}//报告错误@Overridepublic void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {super.onReceivedError(view, errorCode, description, failingUrl);}@Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {super.onReceivedError(view, request, error);}@Overridepublic void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {super.onReceivedHttpError(view, request, errorResponse);}//应用程序重新请求网页数据@Overridepublic void onFormResubmission(WebView view, Message dontResend, Message resend) {super.onFormResubmission(view, dontResend, resend);}//更新历史记录@Overridepublic void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {super.doUpdateVisitedHistory(view, url, isReload);}//重写此方法,可以让webview执行https请求@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {super.onReceivedSslError(view, handler, error);}@Overridepublic void onReceivedClientCertRequest(WebView view, ClientCertRequest request) {super.onReceivedClientCertRequest(view, request);}//返回信息授权请求@Overridepublic void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {super.onReceivedHttpAuthRequest(view, handler, host, realm);}//重写此方法才可以处理浏览器中的按键事件@Overridepublic boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {return super.shouldOverrideKeyEvent(view, event);}//当key事件未被加载的时候调用@Overridepublic void onUnhandledKeyEvent(WebView view, KeyEvent event) {super.onUnhandledKeyEvent(view, event);}@Overridepublic void onUnhandledInputEvent(WebView view, InputEvent event) {super.onUnhandledInputEvent(view, event);}//当webview发生改变的时候调用这个方法@Overridepublic void onScaleChanged(WebView view, float oldScale, float newScale) {super.onScaleChanged(view, oldScale, newScale);}@Overridepublic void onReceivedLoginRequest(WebView view, String realm, String account, String args) {super.onReceivedLoginRequest(view, realm, account, args);}});//设置webview中可以输入textwebview.requestFocus();//设置Web视图//获取网页对话框webview.setWebChromeClient(new WebChromeClient() {@Overridepublic boolean onJsAlert(WebView view, String url, String message, JsResult result) {//构建一个来显示网页中的对话框return true;}@Overridepublic boolean onJsConfirm(WebView view, String url, String message, JsResult result) {return true;}//加载进度@Overridepublic void onProgressChanged(WebView view, int newProgress) {super.onProgressChanged(view,newProgress);}}) ;mProgressDialog = ProgressDialog.show(this, "请稍后", "页面正在加载中");//webview获取焦点webview.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {webview.requestFocus();return false;}}) ;}@Override//设置回退//覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法public boolean onKeyDown(int keyCode, KeyEvent event) {if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {webview.goBack(); //goBack()表示返回WebView的上一页面return true;}return false;}//Web视图private class HelloWebViewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}

加载html时,通过cookie进行数据传递

        if (userinfo != null) {CookieSyncManager.createInstance(this);CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptCookie(true);cookieManager.setCookie(mNewsUrl, "uid=" + uid);cookieManager.setCookie(mNewsUrl, "id=" + id);CookieSyncManager.getInstance().sync();}

清除webview的缓存

public void clerWebviewCache(){if (mHomeHeadImageWebView != null) {mHomeHeadImageWebView.clearCache(true);mHomeHeadImageWebView.clearHistory();mHomeHeadImageWebView.clearFormData();}}

Android中的webview详细使用相关推荐

  1. android webview详情,Android中的WebView详细介绍

    Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化 ...

  2. Android中脱离WebView使用WebSocket实现群聊和推送功能

    WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...

  3. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  4. Android中获取WebView加载的html中console.log输出的内容

    场景 Android中使用WebView加载本地html并支持运行JS代码和支持缩放: Android中使用WebView加载本地html并支持运行JS代码和支持缩放_BADAO_LIUMANG_QI ...

  5. Android中的WebView之loadDataWithBaseURL()与loadData()

    Android中的WebView之loadDataWithBaseURL()与loadData() WebView 加载数据的常用的几种方法如下: public void loadUrl(String ...

  6. android调webview的方法,Android中的WebView详解

    Android中的WebView详解 WebView详解 基本用法 布局文件配置WebView android:id="@+id/wv_news_detail" android:l ...

  7. Android中的JSON详细总结

    1.JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式, ...

  8. android中最新webview的功能,Android WebView实现截长图功能

    本文实例为大家分享了Android实现截长图功能的具体代码,供大家参考,具体内容如下 先看看手机自带的长截屏功能:  机型: vivo x9 plus 大胆推测实现逻辑: 1:需要一个可以滚动的Vie ...

  9. android webview 多文件上传,Android中的webview支持页面中的文件上传实例代码

    Android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有,在android webview中访问时也会出现浏览文件的按钮 但是点击按钮之后没有反应... 那么如何能够 ...

最新文章

  1. 特斯拉到底颠覆了什么?
  2. valgrind的说明使用和原理
  3. 【机器学习算法专题(蓄力计划)】十九、机器学习中SVM算法代码实操
  4. 60岁有30万资金,如何存款最安全?
  5. 前端学习(3147):react-hello-react之getBeforeUpdate
  6. class类初始化之后调用赋值问题记录
  7. 少儿编程:C++绘图相关书籍篇
  8. SEO已死,真的吗,十年SEO从业者的思考
  9. java uuid 随机数_Java随机数和UUID
  10. JDownloader 2 for Mac(百度云无限速下载工具)内附安装教程,需要 macOS 11.x系统
  11. 步态数据去噪滤波器之巴特沃斯滤波器
  12. Matlab读取图像数据并写入TXT
  13. 微信公众号注册认证流程
  14. Raki的读paper小记:REPRESENTATIONAL CONTINUITY FOR UNSUPERVISED CONTINUAL LEARNING
  15. 宏转录组方法_Cell:基因表达的改变和群落的更替塑造了全球海洋宏转录组
  16. 文本分类实战----数据处理篇----embeddings与vocab中词汇不相覆盖问题的处理办法
  17. Unity 引擎报错集锦
  18. 颜色选择器vue3-colorpicker
  19. Java学生信息管理系统(增、删、改、查)
  20. 解决Error: Could not detect Mac OS X Version from sw_vers output: '10.14.3'

热门文章

  1. AI Hero 算法挑战赛,万元奖金等你来拿!
  2. 我对计算机网络的期待,表白对女朋友说的情话短句 我愿是你最期待的风景线...
  3. 收藏 | 用 Keras 实现神经网络来解决梯度消失的问题
  4. linux重装lnmp,基于CentOS 6.5的LNMP安装过程
  5. 7位领域大佬,带你解读三维点云的前沿应用
  6. 0元包邮 | 多传感器融合感知知识导图
  7. mysql linux c tar_linux下mysql的tar包离线安装
  8. 浏览器与硬件交互的方法_【第2058期】现代浏览器内部揭秘之一
  9. linux sftp目录无法切换,linux – SFTP用户无法编辑或创建文件
  10. mysql 优化 案例_[MySQL优化案例]系列 -- OPTIMIZE的威力