【问题标题】:What should i store in the user data in the application and how?我应该在应用程序的用户数据中存储什么以及如何存储?
【发布时间】:2019-01-11 13:07:13
【问题描述】:

当我一次又一次地请求 Firebase 时出现性能问题。网格视图更新非常缓慢。所以在这种情况下我应该怎么做我正在考虑将帖子的路径存储在数据库中。这是好主意还是存储在内部存储中。(缓存)

private void setuptempGrid(View view){
    setupImageGrid(ProfileActivity.images,view);
    FirebaseDatabase.getInstance().getReference()
            .child(getString(R.string.db_user_posts))
            .child(application.getUser().getUserId()).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot d:dataSnapshot.getChildren() ) {
                FirebaseDatabase.getInstance().getReference()
                        .child(getString(R.string.db_posts)).child(getString(R.string.db_public))
                        .child(d.getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        gridImageAdapter.add(dataSnapshot.getValue(Posts.class).getProfilePic());
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

我有这段代码,这需要很长时间才能获取图像,并且每次在创建我的片段时加载。

【问题讨论】:

  • 可能使用 RecyclerView 并使用 AsyncTask
  • 但我不想一次又一次地向服务器发送请求
  • 那么你可以使用像 Realm 或 SQLite 这样的数据库 :)

标签: android firebase caching firebase-realtime-database


【解决方案1】:

使用

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

累加。给docs

通过启用持久性,Firebase 实时数据库客户端在联机时将同步的任何数据都会持久保存到磁盘并且可以脱机使用,即使在用户或操作系统重新启动应用时也是如此。这意味着您的应用通过使用存储在缓存中的本地数据可以像在线一样工作。

也这样做-

DatabaseReference db = FirebaseDatabase.getInstance().getReference()
        .child(getString(R.string.db_user_posts))
        .child(application.getUser().getUserId());
db.keepSynced(true);

【讨论】:

    【解决方案2】:

    使用 Guava 缓存,因为它们经过优化且易于实现。在点击 firebase 之前,请检查您是否拥有指定节点所需的数据。

    【讨论】:

    • 但这是在内存缓存上,可能导致 OOM。
    • 不,不会。 Guava 使用许多约束,例如缓存的最大大小、缓存时间等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2011-02-15
    • 2018-02-19
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多