[英]Firebase for Android, How can I loop through a child (for each child = x do y)
[英]Firebase For Android Studio - How do you loop through each item in a database?
要在上述數據庫中進行迭代,請嘗試以下操作:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Categories");
ref.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnasphot datas: dataSnasphot.getChildren()){
String num=datas.child("1").getValue().toString();
String twos=datas.child("2").getValue().toString();
String threes=datas.child("3").getValue().toString();
String four=datas.child("4").getValue().toString();
//so on
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
使用for循環,那么你就可以迭代里面Barbs
和Tetras
,並得到屬性值內部它們(的1,2,3,4,5,6值。)
對於按鈕:
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getBaseContext(), FishInfo.class);
intent.putExtra("typeName", num);
intent.putExtra("typeInfo", twos);
startActivity(intent);
finish();
}
});
我們有一個非常扁平的firebase數據結構,一旦您了解結構是KEY String“ 1”和VALUE是String,就可以通過單擊按鈕遍歷數據庫。 這種解決方案雖然不夠優雅,但卻可以解決。 添加數據時要考慮的問題將需要一種增加KEY String的方法。 如果您獲得了dataSnapshot.getChildrenCount()並意識到每條記錄有6行,那么對於2條記錄,您的計數為12,因此第3條記錄從12 + 1開始享受代碼
public void doNEXT(View view){
db = FirebaseDatabase.getInstance().getReference();
dbRef = db.child("Quiz Table");
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String question = dataSnapshot.child(String.valueOf(X)).getValue(String.class);
String ansone = dataSnapshot.child(String.valueOf(X = X + 1)).getValue(String.class);
String anstwo = dataSnapshot.child(String.valueOf(X = X + 1)).getValue(String.class);
String ansthree = dataSnapshot.child(String.valueOf(X = X + 1)).getValue(String.class);
String ansfour = dataSnapshot.child(String.valueOf(X = X + 1)).getValue(String.class);
String corans = dataSnapshot.child(String.valueOf(X = X + 1)).getValue(String.class);
long valueX = dataSnapshot.getChildrenCount();
System.out.println("################################################ COUNT Children "+valueX);
etQuestion.setText(question);
etAnsOne.setText(ansone);
etAnsTwo.setText(anstwo);
etAnsThree.setText(ansthree);
etAnsFour.setText(ansfour);
etCorAns.setText(corans);
X = X + 1;
String Z = String.valueOf(X);
etTableName.setText(Z);
if(X > valueX){
Intent intentN = new Intent(ViewDatabase.this,MainActivity.class);
startActivity(intentN);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
正如格林德爾(Grendel)所說,這不是“優雅”的做法,但確實有效! 為了改善他的答案,我們都知道如何使用ArrayList,因此這是另一個版本,其中在onCreate方法中填充(加載)了ArrayList,並在onCreate之外單擊按鈕,使用時可以滾動objArrayList並確保聲明objArrayList。所以它像這樣ArrayList objArrayList = new ArrayList <>()
這是onCreate代碼
db = FirebaseDatabase.getInstance().getReference();
dbRef = db.child("Quiz Table");
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long valueX = dataSnapshot.getChildrenCount();
for (DataSnapshot child : dataSnapshot.getChildren())
objArrayList.add(child.getValue(String.class));
String S = String.valueOf(objArrayList.size());
System.out.println("$$$$$$$$$$$$$$$$$$$$$$ objArrayList SIZE " + S);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}// END OF onCREATE BUNDLE
//=========================
這是滾動按鈕的onClick方法
public void doONE(View view){
//btn onClick method
if (objArrayList != null) {
String question = objArrayList.get(Z);
String ansone = objArrayList.get(Z = Z +1);
String anstwo = objArrayList.get(Z = Z +1);
String ansthree = objArrayList.get(Z = Z +1);
String ansfour = objArrayList.get(Z = Z +1);
String corans = objArrayList.get(Z = Z +1);
etQuestion.setText(question);
etAnsOne.setText(ansone);
etAnsTwo.setText(anstwo);
etAnsThree.setText(ansthree);
etAnsFour.setText(ansfour);
etCorAns.setText(corans);
}
Z = Z + 1;
if(Z > dataSnapshot.getChildrenCount()){
Intent intentN = new Intent(ViewDatabase.this,MainActivity.class);
startActivity(intentN);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.