java - 根据查询更改 firebase 数据

标签 java android database firebase firebase-realtime-database

代码

Query mSeenRef = mDatabaseReference.child("Messages").child(MessageRecieverId).child(MessageSenderId).orderByChild("From").equalTo(MessageRecieverId);

这是查询,如果此查询为真,我想更改另一个子项...类似于添加值事件监听器并获取上面的查询数据...只是我想更改数据而不是获取数据,但我无法在 value 事件监听器中使用 setValue 方法,那么我该怎么办?

我在 MessageRecieverId 中也有 UIDS,里面是 From

enter image description here

最佳答案

尝试以下操作:

DatabaseReference db = FirebaseDatabase.getInstance().getReference();

Query mSeenRef = db.child("Messages").child(MessageRecieverId).child(MessageSenderId).orderByChild("From").equalTo(MessageRecieverId);
mSeenRef.addValueEventListener(new ValueEventListener(){
 @Override
public void onDataChange(DataSnapshot dataSnapshot){
  if(dataSnapshot.exist()) {
     for(DataSnapshot ds: dataSnapshot.getChildren()){
          String keyId=ds.getKey();
         DatabaseReference ref= db.child("Messages").child(MessageRecieverId).child(MessageSenderId).child(keyId);
         Map<String, Object> childUpdates = new HashMap<>();
             childUpdates.put("Seen", true);
             ref.updateChildren(childUpdates);
        }
      }
    }
@Override
public void onCancelled(DatabaseError databaseError) {
  }
};

这将使用dataSnapshot.exists()检查数据库中是否存在该查询,如果该查询存在,您将能够更改子项的值。您需要使用 updateChildren() 方法仅更新一个属性。

查看此处了解更多信息:

https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields

关于java - 根据查询更改 firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52903484/

相关文章:

java - 无法使用 ${param.xxx} 使用 HTML 表单访问 JSP 参数

java - 通过长连接实现与POST(HTTP)的推送技术连接

android - errorCopyingDatabase 从 Assets 文件夹到内存

java - 我如何在 java 代码中优化这个 mySQL 事务?

java - Android:从MySQL数据库获取数据

java - 谁能帮我更正这段代码?

Java 2D 数组问题

java - 如何从 Kubernetes k8s pod 获取堆转储?

java - 如果不存在重复值,则将类/对象添加到数组列表

javascript - 存储多个 id 的最佳技术是什么?