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