2017-07-31 150 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数据库执行查询时,可能会有多个结果。所以快照包含了这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。 –