【发布时间】:2021-10-01 15:58:02
【问题描述】:
我正在处理具有 webviews 的 web 应用程序.. 有 3 或 4 个 webview..我需要的是在用户杀死应用程序后从以前的统计数据中恢复这些 webviews.. 我可以像这样保存 webview 状态,
Bundle bundle = new Bundle();
WebView.saveState(Bundle);
这些是我的要求..
- 将每个捆绑包数据保存到外部存储位置(客户创建的文件夹) 单独作为包裹或字节或任何格式...
- 单独读取保存的数据并转换为捆绑包,然后在用户恢复 webviews 启动应用程序
我在互联网上挖掘,我得到了这个,
-
用于在缓存文件夹中单独保存捆绑数据-->“webstack”文件夹,
公共无效保存(){ 文件栈路径 = new File(getContext().getExternalCacheDir(), "webstack"+unique_tab_id);
Bundle bundle = new Bundle(); WebBackForwardList stacks = saveState(bundle); if(stacks!=null&&stacks.getSize()>0) { Parcel parcel = Parcel.obtain(); parcel.setDataPosition(0); bundle.writeToParcel(parcel, 0); byte[] bytes = parcel.marshall(); parcel.recycle(); ...//save Byte Array Data to file } else { stackpath.delete(); }
}
-
这是用于读取保存的数据并单独重新分配捆绑包,
public void boolean restore(){ 文件栈路径 = new File(getContext().getExternalCacheDir(), "webstack"+unique_tab_id);
if(stackpath.exists()) { Parcel parcel = Parcel.obtain(); byte[] data = ...//read file as Byte Array parcel.unmarshall(data, 0, data.length); parcel.setDataPosition(0); Bundle bundle = new Bundle(); bundle.readFromParcel(parcel); parcel.recycle(); WebBackForwardList stacks = restoreState(bundle); if(stacks!=null && stacks.getSize()>0) { return true; } } return false;}
但这不起作用..我在缓存目录中看不到任何名为“webstack”的文件夹,并且其中没有保存的数据.. 此外,我有一个想法将 webview 状态保存为 aqulite 数据库中的已访问 url 列表..但它不是这样做的合适方法..甚至是一团糟..
请帮助我.. 对不起我的英语不好..
提前致谢..
【问题讨论】:
标签: android android-webview byte android-external-storage parcel