【发布时间】:2017-07-14 02:08:12
【问题描述】:
我需要将具有本机登录屏幕的应用程序与在 web 视图(混合应用程序)内运行的应用程序的其余部分集成。这听起来像是一种常见的方法,但我在将会话数据(cookie)从本机代码传输到 webview 时遇到问题,我认为这与 CookieManager 的异步行为有关。
有时,在某些设备上,cookie 要么被删除,要么未被应用。 根据我的阅读,这可能是因为 removeSessionCookie、setCookie 和 sync 在它们自己的线程中异步运行。我不太了解来自其他编程语言的 Java 中的这一点,因为似乎没有任何钩子可以知道任务何时完成 EG 回调、事件、asyc/await 等。
所以问题是您如何知道异步任务何时在 Android/Java 中完成? 我遇到了同步块语法,但它看起来不会等待 removeSessionCookie 之类的完成。
我的代码看起来有点像这样:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeSessionCookie(); // problem
CookieSyncManager.getInstance().sync(); // maybe problem
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
for (int i = 0; i < cookies.size(); i++) {
Cookie cookie = cookies.get(i);
String cookieString = cookie.getName() + "=" + cookie.getValue();
cookieManager.setCookie(url, cookieString);
}
CookieSyncManager.getInstance().sync();
【问题讨论】:
标签: android cookies asynchronous webview