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();
相關文章
相關標籤/搜索