【问题标题】:Best way to handle Firebase references with Android使用 Android 处理 Firebase 引用的最佳方式
【发布时间】:2016-01-15 00:01:02
【问题描述】:

当您在 Android 应用中处理 Firebase 数据(读取、写入...)时,您需要获取 firebase 引用才能处理数据。

由于 Firebase 引用是一棵 JSON 树,如果您指向树根,那么您始终可以访问一个子节点,无论深度如何。

问题:从内存和延迟的角度来看,在代码中处理此引用的最佳方式是什么?

    • C1
      • C10
      • C11
    • C2
      • C21

1/ 在应用程序的根目录中创建一个静态 Firebase 引用。

MyApplication.getFirebaseRootRef().chid(C1).chid(C11).setValue(...); 

2/ 为子 C11 创建一个新的 firebase ref

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/ 混合 2

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

性能有什么不同吗?

也许您对可读性和维护有一些建议?

【问题讨论】:

    标签: java android optimization firebase


    【解决方案1】:

    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");
            ...
        }
    

    通过将所有内容放入每个活动中,这些活动非常独立。

    【讨论】:

      【解决方案2】:

      1) 就我个人而言,我没有将单吨用于火力基地 2).不要使用第二个。有时你可能想要一个动态路径变量.. 3)我认为3 n 4具有相同的效果..

      【讨论】:

      • 谢谢,如果有原因,您能否说明为什么不使用单例!
      【解决方案3】:

      我就是这样做的。!此方法还可以帮助我获取未知的子键及其值访问权限。!

        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);
      

      【讨论】:

        猜你喜欢
        • 2020-05-14
        • 2021-04-18
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 2015-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多