8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
项目中如果用到了 WebView,那就免不了跟 Cookie 打交道。
比如,你时常需要判断用户的登录状态,如果用户未登录,那就必须限制部分功能的使用。
那么原生 Android 该如何获取 WebView 中的 Cookie 呢?
我们可以定制一个 WebViewClient 并重写内部的相关方法来实现,并不建议使用匿名类的方式。新建一个类 MyWebViewClient 继承自 WebViewClient,然后重写其 onPageFinished(WebView, String) 方法:public class MyWebViewClient extends WebViewClient {
String cookieTag = null;
String cookieTel = null;
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
CookieManager cookieManager = CookieManager.getInstance();
String cookieStr = cookieManager.getCookie(url);
try {
cookieTag = cookieStr.substring(0, 8); // 确定前缀是不是 phoneNum
if (cookieTag.equals("phoneNum")) {
cookieTel = cookieStr.substring(9, 20); // phoneNum 后面的电话号码
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String getCookieTag() {
return cookieTag;
}
public String getCookieTel() {
return cookieTel;
}
}
使用 CookieManager 的 getCookie() 方法来获取存储的 Cookie,这里判断 Cookie 中的前缀是否为 phoneNum,如果是的话证明已经登录,并截取后面 11 位数字为用户的手机号码,然后通过 Getter 来提供传值方法。
然后在 WebView 中配置这个自定义的 WebViewClient:MyWebViewClient myWebViewClient = new MyWebViewClient();
webView.setWebViewClient(myWebViewClient);
接着就可以通过相关的 Getter 方法来获取传值:String tel = myWebViewClient.getCookieTel();
于是获取 Cookie 的方法就完成了。
有了 Cookie,当用户退出登录时,我们也需要清除 Cookie:logOutBtn.setOnClickListener(v -> {
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().removeSessionCookie();
CookieManager.getInstance().removeAllCookie();
CookieSyncManager.getInstance().sync();
webView.clearCache(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.loadUrl(loginUrl); // 重新加载登录页面
Intent intent = getIntent();
finish();
startActivity(intent);
});
Android 为我们提供了很多与清除 Cookie 相关的操作,我基本都写上去了,你会发现我在下面销毁了当前 Activity 并重新启动,原因是上面清除的是本地的 Cookie,但有些逻辑我们已经从 Cookie 中获取了值并存储在全局变量中,使某些登录后才能使用的功能即使在清除 Cookie 后依然可以使用,所以销毁当前 Activity 可以把依附该 Activity 上的变量或引用随着 Activity 的生命周期而消亡。
当然也可以通过其他的逻辑避免这个问题,不过我觉得会复杂很多,不如这个方法用得方便。