我构建了一个与firebase db交互的应用程序。结构如下。
game
question
-KiwYrNcX6B-VSLV8OmQ
titleofquestion
a:
"test"
b:
"test"
c:
"test"
现在,为了得到我的问题对象,我成功完成了以下操作。
databaseReference = FirebaseDatabase.getInstance().getReference().child("question");
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Question q = postSnapshot.getValue(Question.class);
listValues.add(q.getA());
keyValues.add(postSnapshot.getKey()); //This gives me the titleofquestion as a string.
Log.d(TAG, "keyValue: "+postSnapshot.getKey());
}
}
当我尝试使用此值删除另一个方法中的条目时
databaseReference.child(keyValues.get(position)).removeValue(); //
keyValues.get(position) gives me title of question
没有任何反应。我该如何解决这个问题?
编辑:我认为我应该使用侦听器进行删除操作,但我不确定
答案 0 :(得分:1)
databaseReference.child(keyValues.get(position)).setValue("");
可能是这样,通过将键的值设置为("")即为空
答案 1 :(得分:0)
您的代码归结为:
databaseReference = FirebaseDatabase.getInstance().getReference().child("question");
keyValues.get(position) gives me title of question
databaseReference.child(keyValues.get(position)).removeValue(); //
因此,您要删除路径中的值:/question/<titleofquestion>
。
您的JSON结构与此路径不匹配,因为您在其中有推送ID:/question/<pushid>/<titleofquestion>
。所以你拥有的代码(成功)删除了一个不存在的值。
我可以想到两个解决方案:
从您分享的JSON中,我们无法看到为什么您在那里拥有推送ID的级别。如果不是严格需要,可以将数据模型简化为:
game
question
titleofquestion
a:
"test"
b:
"test"
c:
"test"
然后您当前的代码已经可以使用了。
如果数据模型中需要推送ID,您将获得每个问题的完整路径以便将其删除。
首先,您存储整个路径而不仅仅是密钥:
databaseReference = FirebaseDatabase.getInstance().getReference().child("question");
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Question q = postSnapshot.getValue(Question.class);
listValues.add(q.getA());
keyValues.add(dataSnapshot.getKey()+"/"+postSnapshot.getKey()); //This gives the path to the question
}
}
然后您可以使用当前代码删除该问题:
databaseReference.child(keyValues.get(position)).removeValue();
keyValues.get(position) gives the path of question