如何在片段娱乐中从firebase恢复已经在recyclerview中获取的数据

问题描述

我已经在回收站视图中从实时数据库中检索了数据,但是在重新创建片段后,再次获取了相同的数据。我想恢复已经获取的数据,并在片段重新创建后将其设置为回收器视图。

解决方法

Recreation 含义 摧毁一切并重新创造 我假设您希望尽量减少对服务器的调用次数,以减少使用和计费成本

最简单的方法是为你的数据库启用持久化 the documentation about that 并修改您的代码以检查数据是否存在于缓存中并获取它 如果不是,那么从服务器获取它

当你定期更新数据时,这很容易但不好

所以我建议的解决方案是使用单例模式创建一个存储库类来制作单个实例

并使服务器调用它的构造函数以获取您需要的所有数据

这样您每次打开应用程序时都会向服务器发出一次调用,但是当我来娱乐时,您将使用存储库中的数据激发

示例 我会假设你得到一个字符串列表

      public class Repository {
            private static Repository instance = null;
            private static final Object LOCK = new Object();
            private List<String> strings;
        
            private Repository (){
                strings = {Make Server Call Here}
            }
        
            public static Repository getInstance(){
                if (instance == null){
                    synchronized (LOCK){
                        if (instance == null){
                            instance = new Subjects_Repository();
                        }
                    }
                }
                return instance;
            }
           public List<String> getStrings(){
              return strings;
    }

注意:从 firebase 获取数据是在后台线程上完成的,因此在使用 getStrings() 方法之前,请确保先从服务器获取数据;