【发布时间】:2017-09-26 21:36:59
【问题描述】:
我正在使用 Firebase 数据库来存储用户的报告。每个用户只能提交 10 份不同的报告。
在下面的示例中,我们有一个名为“Jasna Kuljancic”的用户提交了 3 份报告。
我的问题是如何检查用户是否已经提交了特定报告?
我必须检查“location”、“mode”、“spinnerOne”的值,并将它们与用户刚刚输入的内容进行比较,如果它已经存在,则不要添加到数据库中,如果是,那么添加它。这是我的尝试:
public void checkifentryExistofNot() {
uniqueID = mDatabaseReference.push().getKey();
fullname = “Jasna Kuljancic”;
CATEGORY = “Clinical First”);
final Report subreport = new Report(SELECTED_LOCATION,
locationEditText.getText().toString(),
modeEditText.getText().toString(),
Integer.parseInt(dateEditText.getText().toString()));
mDatabaseReference.child("Students Reports").child(fullname).child(CATAGORY).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int numberofCount = (int) dataSnapshot.getChildrenCount();
if (numberofCount == 0) {
mDatabaseReference.child("Students Reports").child(fullname).child(CATAGORY).child(uniqueID).setValue(subreport);
}
if (numberofCount != 0) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
Report datareports = child.getValue(Report.class);
thelocation = datareports.getLocation();
themode = datareports.getMode();
if (thelocation.equals(locationEditText.getText().toString()) && themode.equals(modeEditText.getText().toString())) {
break;
} else {
mDatabaseReference.child("Students Reports").child(fullname).child(CATAGORY).child(uniqueID).setValue(subreport);
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我的解决方案的问题是 for 循环将检查每个报告,并且在每种情况下它都会添加或不添加新报告,但这会发生在现有报告的数量上,并且它应该只执行一次。
也就是说,如果我们有 3 个条目,并且每次都不存在,它会提交 3 次报告(这还不错)。但是,如果它检查第一个报告并且确实存在,则循环将退出,因为我在那里有一个“中断”(这很好)但是假设第二个报告将是重复的,它已经将其添加到数据库中,因为第一个条目不是重复的。
我觉得我已经完成了这项工作,应该有更快的方法来做到这一点。
【问题讨论】:
标签: android firebase firebase-realtime-database