android中webview携带cookie以及webview所加载网页中js调用java方法问题

      最近项目中须要用到webview来加载一个抽奖页面,抽奖页面访问须要带上cookie,而且在该抽奖页面点击分享会调用java里分享的方法,弹出一个popwindow分享界面,如今把这里面遇到的问题以及须要注意的问题共享一下,但愿对遇到有一样问题的兄弟有所帮助。java

  首先说的是使用webview加载网页须要携带cookie的问题,直接上代码:android

    这是在请求登陆成功后获取到全部的cookies,而后遍历cookies,将每一个条目存储到本身application的strUserSession这个数组中。
web

    Map<String, List<String>> mData = conn.getHeaderFields();
    List<String> lCookies = mData.get("Set-Cookie");
    if (lCookies != null && lCookies.size() > 0) {
    if (MyApplication.strUserSession == null) {
       MyApplication.strUserSession = new String[lCookies.size()];
        for (int i = 0; i < lCookies.size(); i++) {
            String[] sessionId = lCookies.get(i).split(";");
            MyApplication.strUserSession[i] = sessionId[0];
         }
    }

    接下来是webview加载网页时候携带cookie的方法:数组

  public void synCookies(Context context) {
        String strSessionData = "";
        if (MyApplication.strUserSession != null
                && MyApplication.strUserSession.length > 0) {
            if (MyApplication.strUserSession != null) {
                for (int i = 0; i < MyApplication.strUserSession.length; i++) {
                    strSessionData = MyApplication.strUserSession[i];
                }
            }
        }
        CookieSyncManager.createInstance(context);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.removeSessionCookie();// 移除
        cookieManager.removeAllCookie();
        cookieManager.setCookie(strUrl, strSessionData);// cookies是在HttpClient中得到的cookie
        CookieSyncManager.getInstance().sync();
   }

     这里须要注意的是 cookieManager.setCookie(strUrl, strSessionData)这里设置的cookie不是获取全部的cookies集合,而是遍历后的单个cookie条目,还有 cookieManager.removeAllCookie()这个方法必定要有,这个解决了有的会出现第一次加载须要携带cookie的网页的时候会失败,第二次又正常的问题。这个方法的调用:cookie

webview.getSettings().setJavaScriptEnabled(true);
synCookies(getApplicationContext());
webview.loadUrl(strUrl);


接下来就要说的是在webview所加载的网页中点击某个按钮,调用android里的代码问题,咱们的需求是点击页面上的分享按钮,会调用android里的分享的方法,具体作法以下,在调用loadUrl以前调用这句,这句就将js与java关联起来了:session

webview.addJavascriptInterface(this, "showShare");

    而后这就是android里调用分享的方法,这里须要注意的是若是该方法里有耗时操做必须放在子线程,否则会阻塞程序崩溃:app

public void showShareDialog() {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                showShare();
                setShareContent();
            }
        });
    }

最后只须要在js代码里加上这一句就能够调用android里的方法了:ide

window.showShare.showShareDialog();
相关文章
相关标签/搜索