最近項目中須要用到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();