zoukankan      html  css  js  c++  java
  • 使用webview加载网页时session同步

    直接调用Android的webview加载URL时,由于需要登录的session导致URL无法显示,解决方案是在需要访问的URL中加session:

             String reporturl = "http://xxx.xxx.xx";
    	 CookieSyncManager.createInstance(getApplication());
     	 CookieManager cookieManager = CookieManager.getInstance();
    	 CookieSyncManager.getInstance().startSync();
    	 List<Cookie> sessionCookie = MyApplication.getAppCookie();
    	 String re= cookieManager.getCookie(reporturl);
    	   if (sessionCookie != null) {
     		  for (int i = 0; i < sessionCookie.size(); i++) {
    	            Cookie cookie = sessionCookie.get(i);
    	            String cookieString=cookie.getName() + "=" + cookie.getValue()    //path与Domain必须加上
    	                    + "; path=" + cookie.getPath()
    	                    + "; domain=" + cookie.getDomain();
    	            cookieManager.setCookie(reporturl, cookieString);
    	        }
    		 String re2= cookieManager.getCookie(reporturl);
    	         CookieSyncManager.getInstance().sync();
    	 }
    	
    

     其中sessionCookie是在登录时放入MyApplication中的:

             HttpPost httpPost = new HttpPost(url);   
    httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); httpClient.getParams().setIntParameter("http.socket.timeout", 3000); HttpResponse response = httpClient.execute(httpPost); String result = EntityUtils.toString(response.getEntity(),HTTP.UTF_8); Log.d(TAG, "HTTP Response: " + result); List<Cookie> cookies = httpClient.getCookieStore().getCookies(); MyApplication.setAppCookie(cookies);

    然后可以加载URL了:

          myWebView.getSettings().setJavaScriptEnabled(true);  
          myWebView.getSettings().setSupportZoom(true); 
          myWebView.getSettings().setAppCacheEnabled(true);
          //设置缓存模式
          myWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
          myWebView.loadUrl(reporturl);
          myWebView.getSettings().setBuiltInZoomControls(true);
          myWebView.getSettings().setUseWideViewPort(true);
          myWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
          myWebView.getSettings().setLoadWithOverviewMode(true);
          myWebView.setWebViewClient(new WebViewClient(){
              public boolean shouldOverrideUrlLoading(WebView view, String url) {  //重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
                   view.loadUrl(url);
                   return true;
              }});
  • 相关阅读:
    WiFi 和蓝牙一体的 ESP32 芯片及乐鑫官方的 Arduino 开发工具包
    给模块添加 USB 支持的 USB Host Shield Mini
    设备间数据通信 —— 串行外设接口(SPI)协议
    ESP32 开发板刷入 MicroPython
    芯片、模组、开发板以及业余爱好者如何选择
    快速了解线路板(PCB)基础知识
    终端发展过程及 tty、pty、pts 的区别
    时间类型和时间戳
    使用Qt实现一个必应壁纸客户端
    给网站添加Let's Encrypt的免费ssl证书
  • 原文地址:https://www.cnblogs.com/seemann/p/4468701.html
Copyright © 2011-2022 走看看