在 firebase android studio 中更新节点时无限循环
infinite looping when updating nodes in firebase android studio
这是我的代码
if (v == btnAddition) {
dbRef = FirebaseDatabase.getInstance("https://mathcc-652c5-default-rtdb.asia-southeast1.firebasedatabase.app/").getReference("Quizzes").child("1");
System.out.println(dbRef.child("addition").get().toString());
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
QuizList quizList = snapshot.getValue(QuizList.class);
String addition = quizList.getAddition();
System.out.println(quizList.getAddition());
if (addition.equals("yes")) {
QuizList quizList1 = new QuizList("no"
, quizList.getMultiplication()
, quizList.getSubtraction()
, quizList.getDivision()
, quizList.getMeasurement());
dbRef.setValue(quizList1);
return;
} else if (addition.equals("no")) {
QuizList quizList1 = new QuizList("yes"
, quizList.getMultiplication()
, quizList.getSubtraction()
, quizList.getDivision()
, quizList.getMeasurement());
dbRef.setValue(quizList1);
return;
}
} else {
QuizList quizList = new QuizList("yes", "yes", "yes", "yes", "yes");
dbRef.setValue(quizList);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
每当我单击按钮时,它都会一直循环到永恒。
我不知道我做错了什么。我对 firebase 还很陌生,android 请帮忙
我试图在数据库中更改的数据:
当您在路径上调用 addValueEventListener
时,您的 onDataChange
会立即使用路径中的当前值被调用,并且当路径下的任何数据发生变化时它也会被调用。
由于您写回 onDataChange
中的相同路径,这会再次触发侦听器,这会再次调用您的 onDataChange
,然后再次写入相同的路径,从而触发侦听器再次....等等
如果您只想 read the data once,请使用 get()
或 addListenerForSingleValueEvent
:
dbRef.addListenerForSingleValueEvent(new ValueEventListener() {
...
这是我的代码
if (v == btnAddition) {
dbRef = FirebaseDatabase.getInstance("https://mathcc-652c5-default-rtdb.asia-southeast1.firebasedatabase.app/").getReference("Quizzes").child("1");
System.out.println(dbRef.child("addition").get().toString());
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
QuizList quizList = snapshot.getValue(QuizList.class);
String addition = quizList.getAddition();
System.out.println(quizList.getAddition());
if (addition.equals("yes")) {
QuizList quizList1 = new QuizList("no"
, quizList.getMultiplication()
, quizList.getSubtraction()
, quizList.getDivision()
, quizList.getMeasurement());
dbRef.setValue(quizList1);
return;
} else if (addition.equals("no")) {
QuizList quizList1 = new QuizList("yes"
, quizList.getMultiplication()
, quizList.getSubtraction()
, quizList.getDivision()
, quizList.getMeasurement());
dbRef.setValue(quizList1);
return;
}
} else {
QuizList quizList = new QuizList("yes", "yes", "yes", "yes", "yes");
dbRef.setValue(quizList);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
每当我单击按钮时,它都会一直循环到永恒。 我不知道我做错了什么。我对 firebase 还很陌生,android 请帮忙
我试图在数据库中更改的数据:
当您在路径上调用 addValueEventListener
时,您的 onDataChange
会立即使用路径中的当前值被调用,并且当路径下的任何数据发生变化时它也会被调用。
由于您写回 onDataChange
中的相同路径,这会再次触发侦听器,这会再次调用您的 onDataChange
,然后再次写入相同的路径,从而触发侦听器再次....等等
如果您只想 read the data once,请使用 get()
或 addListenerForSingleValueEvent
:
dbRef.addListenerForSingleValueEvent(new ValueEventListener() {
...