2015-10-16 61 views
5

当您在Android应用中处理Firebase数据(读取,写入...)时,您需要获取Firebase参考,然后才能处理数据。使用Android处理Firebase参考的最佳方式

由于Firebase引用是JSON树,因此如果指向树根,则可以随时访问子节​​点,无论深度如何。

问题:从内存和等待时间的角度来处理代码中的这个引用的最佳方式是什么?

    • C1
      • C10
      • C11
    • C2
      • C21

1 /创建静态火力地堡裁判在应用程序的根。

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

2 /创建为孩子C11新的火力点裁判

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

有什么区别在表现?

也许你可能会对可读性和维护有一些建议?

回答

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)个人我不使用单吨火力 2).Don't使用第二one.may有时要动态路径变量.. 3)我认为3 N 4有同样的效果..

+0

谢谢,请问为什么你不使用单身人士,如果有一个原因! – Anthony

+0

@Anthony恕我直言,单身人士不是线程安全的 – Asthme

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