Android webview 写入cookie的解决方法以及一些属性设置
原文地址:https://www.2cto.com/kf/201703/616868.html
Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入Cookie的问题,项目中正好APP和网页交互中要用到免登录,因为在网上搜索了很多种方法,看到一个解决问题了,现在记录分享下。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
void setCookie() { String StringCookie = "key=" + value + ";path=/" CookieManager cookieManager = CookieManager.getInstance(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cookieManager.removeSessionCookies( null ); cookieManager.flush(); } else { cookieManager.removeSessionCookie(); CookieSyncManager.getInstance().sync(); } cookieManager.setAcceptCookie( true ); cookieManager.setCookie(url, StringCookie); } |
以上代码在webview设置属性、webview.loadUrl之前调用就可以了
webview设置的一些属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//声明WebSettings子类 WebSettings webSettings = webView.getSettings(); //支持javascript webSettings.setJavaScriptEnabled( true ); //设置自适应屏幕,两者合用 webSettings.setUseWideViewPort( true ); //将图片调整到适合webview的大小 webSettings.setLoadWithOverviewMode( true ); // 缩放至屏幕的大小 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //缩放操作 webSettings.setSupportZoom( true ); //支持缩放,默认为true。是下面那个的前提。 webSettings.setBuiltInZoomControls( true ); //设置内置的缩放控件。若为false,则该WebView不可缩放 webSettings.setDisplayZoomControls( false ); //隐藏原生的缩放控件 //设置WebView缓存 //优先使用缓存: webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //缓存模式如下: //LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据 //LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。 //LOAD_NO_CACHE: 不使用缓存,只从网络获取数据. //LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。 //不使用缓存: webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); |
关于前进 / 后退网页:
1
2
3
4
5
6
7
8
9
10
11
12
|
//是否可以后退 Webview.canGoBack() //后退网页 Webview.goBack() //是否可以前进 Webview.canGoForward() //前进网页 Webview.goForward() //以当前的index为起始点前进或者后退到历史记录中指定的steps //如果steps为负数则为后退,正数则为前进 Webview.goBackOrForward(intsteps) |
常见用法:Back键控制网页后退
在不做任何处理前提下 ,浏览网页时点击系统的“Back”键,整个 Browser 会调用 finish()而结束自身 目标:点击返回后,是网页回退而不是推出浏览器 解决方案:在当前Activity中处理并消费掉该 Back 事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@Override public boolean onKeyDown( int keyCode, KeyEvent event) { if ((keyCode == KEYCODE_BACK) && Webview.canGoBack()) { Webview.goBack(); return true ; } return super .onKeyDown(keyCode, event); } //或者下面这种 @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); return ; } super .onBackPressed(); } |
注意事项:如何避免WebView内存泄露?
不在xml中定义 Webview ,而是在需要的时候在Activity中创建,并且Context使用 getApplicationgContext()
1
2
3
4
|
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); webView= new WebView(getApplicationContext()); webView.setLayoutParams(params); mLayout.addView(webView); |
在 Activity 销毁( WebView )的时候,先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。
1
2
3
4
5
6
7
8
9
10
11
12
|
@Override protected void onDestroy() { if (webView!= null ) { webView.loadDataWithBaseURL( null , "" , "text/html" , "utf-8" , null ); webView.clearHistory(); ((ViewGroup) webView.getParent()).removeView(webView); webView.destroy(); webView= null ; } super .onDestroy(); } |
Android webview 写入cookie的解决方法以及一些属性设置的更多相关文章
- JS 无法清除Cookie的解决方法
JS 无法清除Cookie的解决方法 项目中使用sdmenu.js时,需要在登录时清除Cookie,而sdmenu默认是会保存Cookie的 下面是sdmenu.js保存Cookie的方法 doc ...
- Android SDK下载失败的解决方法
Android SDK下载失败的解决方法 图1 在下载过程中,Android SDK Manager Log中出现下面出错信息: Preparing toinstall archives Downlo ...
- android studio 更新 Gradle错误解决方法(Gradle sync failed)
android studio 更新 Gradle错误解决方法 Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...
- 【配置】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。
× 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 5 ...
- 【转】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。
检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 ...
- android webview带cookie访问url
问题描述在原生和h5混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是app登录了账号,但是网页却没有,所有会禁止访问此url,webview就会显示白屏.所以要访问此url, ...
- windows无法停用“Android Composite Interface”设备的解决方法
遇到这个问题时,解决方法如下: 打开设备管理器 -> 进程 -> 找到 adb.exe -> 右击选择结束进程 -> 然后重新弹出Android设备
- [原创]HierarchyView的实现原理和Android设备无法使用HierarchyView的解决方法
最近在看一个老外写的东西,发现里面有个类,使用这个类可以让任何设备使用HierarchyView. 众所周知,市面上卖的Android设备,一般都不能使用HierarchyView,所以借此机会,了解 ...
- android studio中文乱码的解决方法【转】
一. 在android的源文件中的乱码问题 Android Studio安装后发现所有的中文,不管是界面上的还是输出的log中的中文都变成小框框,具体的解决方法如下, 可以肯定是字体的问题 解决:菜单 ...
随机推荐
- C语言蓝桥杯比赛原题和解析
蓝桥杯:在计算机编程领域,是具有一定含金量的竞赛,用于选拔信息技术人才. 一般分为多个领域,其中包含了C/C#/C++/Java/Python等编程语言的测试题,多为算法的设计题. 下面,在搜题过程中 ...
- matlab之数组反序输出
a=[1 2 3 4 5] a(end:-1:1)=[5 4 3 2 1]
- 针对jar里面的图片不显示问题
做了一个html生产pdf案例. 然后把图片放到resource/static/model/img下面,生成jar包运行,发现图片不显示, 发现html里面的src必须是http域名开头的图片. 下面 ...
- 使用session存储数据
@WebServlet("/reply") public class ReplyServlet extends HttpServlet { @Override protected ...
- 三.cron计划任务
• 用途:按照设置的时间间隔为用户反复执行某一项固 定的系统任务 • 软件包:cronie.crontabs • 系统服务:crond • 日志文件:/var/log/crond • 使用 cro ...
- .net之大文件断点续传
HTML部分 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.a ...
- learning java java.time相关类
var clock = Clock.systemUTC(); System.out.println(clock.instant()); System.out.println(clock.millis( ...
- learning java Date类
var d1 = new Date(); var d2 = new Date(System.currentTimeMillis() + 1000); System.out.println(d1); S ...
- QtWebEngineWidgets
我用的qt5.10+VS2017,2013应该一样项目属性里手动添加包含目录:(QTDIR)\include\QtWebEngineWidgets,(QTDIR)\include\QtWebChann ...
- element-ui upload上传组件问题记录
element-ui upload上传组件遇到的问题