【问题标题】:Save Bundle data to a file and read from file in Android将 Bundle 数据保存到文件并在 Android 中从文件中读取
【发布时间】:2021-10-01 15:58:02
【问题描述】:

我正在处理具有 webviews 的 web 应用程序.. 有 3 或 4 个 webview..我需要的是在用户杀死应用程序后从以前的统计数据中恢复这些 webviews.. 我可以像这样保存 webview 状态,

Bundle bundle = new Bundle();    
WebView.saveState(Bundle);

这些是我的要求..

  1. 将每个捆绑包数据保存到外部存储位置(客户创建的文件夹) 单独作为包裹或字节或任何格式...
  2. 单独读取保存的数据并转换为捆绑包,然后在用户恢复 webviews 启动应用程序

我在互联网上挖掘,我得到了这个,

  1. 用于在缓存文件夹中单独保存捆绑数据-->“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();
     }
    

}

  1. 这是用于读取保存的数据并单独重新分配捆绑包,

    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


    【解决方案1】:

    对于捆绑包,我建议先将捆绑包转换为 HashMap 然后您可以将其存储到文件中。 读取过程类似您需要将文件解析为 HashMap 并将键值对设置为新包。 Bundle是二进制格式,可以包含parcellable对象和另一个bundle,因此应用程序外的序列化和反序列化不能没有错误。 另请注意,bundle 可以有不同的版本,因此不能从一个应用程序转移到另一个应用程序。

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多