处理 Firebase 引用的最佳 Android 方法

6
当你在Android应用中处理Firebase数据(读取、写入等),你需要获取Firebase引用,然后才能处理数据。由于Firebase引用是一个JSON树,如果你指向树的根节点,那么无论深度如何,你都可以访问子节点。问题是:从内存和延迟的角度来看,处理代码中的这个引用的最佳方法是什么?1/ 在应用程序中创建一个静态Firebase引用,指向根节点。
MyApplication.getFirebaseRootRef().chid(C1).chid(C11).setValue(...); 

2/ 为子节点C11创建一个新的Firebase引用

Firebase ref = new Firebase("https://your.firebaseio.com/C1/C11");
ref..setValue(...);

3/ 混合云

Firebase ref = new Firebase("https://your.firebaseio.com");
ref.child(C1).child(C11).setValue(...);

4/ Hybrid 2

Firebase ref = new Firebase("https://your.firebaseio.com").child(C1).child(C11);
ref.setValue(...);

性能上有什么区别吗?

对于可读性和维护性,您可能会有一些建议吗?

3个回答

5
Firebase的查询和引用是轻量级对象。 繁重的工作由Firebase SDK内部管理的类背后自动执行。
因此,在您提出的任何方法之间,不会有显着的性能差异。
个人偏好如下:
我通常在每个活动中将引用作为成员变量保存。
class MainActivity extends AppCompatActivity {
    Firebase mRef;

如果我有更多的主列表类型,我会为它们添加成员:
class MainActivity extends AppCompatActivity {
    Firebase mRef;
    Firebase mUsersRef;
    Firebase mPostsRef;

    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(...);
        ...
        mRef = new Firebase("https://yours.firebaseio.com");
        mUsersRef = mRef.child("users");
        mPostsRef = mRef.child("posts");
        ...
    }

把所有东西都放在每个活动中,这样它们就很好地自包含了。


0

1)个人而言,我没有使用单例模式来操作 Firebase。 2)不要使用第二种方式。有时你可能需要一个动态路径变量。 3)我认为第三种和第四种方式效果是相同的。


谢谢,您能否开发一下为什么不使用单例模式,如果有原因的话! - Anthony

0

我是这样做的!这种方法还帮助我获取未知子键和其值的访问。

  mdatabaseRef.child("users").orderByKey().equalTo(key).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {


                            if(lList.size()>0)
                                lList.clear();






            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {




     if(postSnapshot.getKey()!=null)
       {
     Log.e(TAG, "::User:Child:1"+postSnapshot.getKey());

    mdatabaseRef.child("Users")
    .child(postSnapshot.getKey())
    .addValueEventListener(new ValueEventListener() {
      @Override



      public void onDataChange(DataSnapshot dataSnapshot) {

      Log.e(TAG, "::Post::Child:2"+dataSnapshot.getKey());

      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {


        final Post post= postSnapshot.getValue(Post.class);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接