2017-07-31 149 views
0

enter image description here用singlechildevent檢索Firebase數據

這是我的firebase數據結構。孩子「標籤」是根的孩子。

final Query searchquery = mDatabase.child("Tags").orderByKey().limitToFirst(10).startAt(s.toString().toLowerCase()).endAt(s.toString().toLowerCase() + "\uf8ff"); 
searchquery.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     try { 
      String u = dataSnapshot.child("article_name").getValue(String.class); 
     Toast.makeText(MainActivity.this,":/ : "+u.toString(),Toast.LENGTH_LONG).show(); 
     }catch (Exception tg){ 
      Toast.makeText(MainActivity.this,tg.toString(),Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

我想獲得孩子「article_name」的值。我使用了上面的代碼。但它返回null。

回答

0

請使用此代碼:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference tagsRef = rootRef.child("Tags"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String article_name = ds.child("article_name").getValue(String.class); 
      Log.d("TAG", tagsRef); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
tagsRef.addListenerForSingleValueEvent(eventListener); 

輸出將是:

Blood Circulation 
Dummy Article 

也不要忘了使用名稱爲不包含任何空格鍵。因此,您需要更改blood circulation中的blood_circulationbloodCirculation

+1

您需要循環的原因:當您針對Firebase數據庫執行查詢時,可能會有多個結果。所以快照包含了這些結果的列表。即使只有一個結果,快照也會包含一個結果列表。 –