2015-10-16 60 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);