2015-10-16 15 views
5

Kiedy zajmujesz się danymi Firebase (czytać, pisać ...) w aplikacji dla systemu Android, musisz uzyskać referencję firebase, aby móc przetwarzać dane.Najlepszy sposób obsługi referencji Firebase z Androidem

Ponieważ odniesienie do bazy Firebase jest drzewem JSON, jeśli wskażesz katalog główny drzewa, możesz zawsze uzyskać dostęp do dziecka, nie ma znaczenia głębokość.

Pytanie: jaki jest najlepszy sposób z pamięci i punktu widzenia opóźnienia do obsługi tego odniesienia w kodzie?

  • głównej
    • C1
      • C10
      • C11
    • C2
      • C21

1/Tworzenie statycznej Firebase ref do korzenia w aplikacji.

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

2/Utwórz nowy Firebase ref dla dziecka C11

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

3/Hybrid

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

Czy jest jakaś różnica w wydajności?

Może masz jakieś rady dotyczące czytelności i konserwacji?

Odpowiedz

5

Zapytania i referencje bazy Firebase są lekkimi obiektami. Ciężkie podnoszenie odbywa się za kulisami według klas, które są wewnętrzne (i zarządzane przez) pakiet SDK Firebase.

Z tego powodu nie będzie znaczącej różnicy w wydajności między dowolnymi podejściami, które zaproponowałeś.

osobiste preferencje poniżej

zwykle przechowują odniesienia jako członka w każdej działalności.

class MainActivity extends AppCompatActivity { 
    Firebase mRef; 

Jeśli mam więcej rodzajów lista podstawowa, dodam dla tych członków:

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

Stawiając wszystko w każdej działalności, to są ładnie samowystarczalny.

0

1) Osobiście nie używam jednego tonę Firebase 2) .Don't użyć drugi one.may być czasami chcesz zmienną dynamiczną ścieżkę .. 3) Myślę, 3 n 4 ma taki sam efekt ..

+0

dziękuję, czy mógłbyś rozwinąć dlaczego nie używasz singleton jeśli jest powód! – Anthony

+0

@Anthony IMHO singleton nie jest bezpieczny dla wątków – Asthme

0

Robię to w ten sposób.! ta metoda pomaga mi również uzyskać nieznany klucz podrzędny i jego dostęp do wartości.

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); 
Powiązane problemy