java - 如何在 firebase 数据库中获取特定键并比较它们是否相同?
问题描述
我一直在为交付系统应用程序使用 firebase 制作项目。
问题:在这张图片中,我需要获取这两个键(或者我认为是父键)并将它们存储在一个字符串中,或者如果可能的话,我只想知道我是否可以检查用户中的 Id 是否有重复项。如何检查这些键是否重复或存在并将其存储在字符串中(如果存在)。
更新代码,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manageordergrocery);
mRecyclerView2= findViewById(R.id.recyclerview1);
mRecyclerView2.setHasFixedSize(true);
mRecyclerView2.setLayoutManager(new LinearLayoutManager(this));
mModel2 = new ArrayList<>();
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
mAdapter2=new ViewHolder1(Manageordergrocery.this, mModel2);
mRecyclerView2.setAdapter(mAdapter2);
mDatabaseReference2= FirebaseDatabase.getInstance().getReference("Users");
mDatabaseReference2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
String myParentNode = postSnapshot.getKey();
mDatabaseReference2 = FirebaseDatabase.getInstance().getReference();
mDatabaseReference2.orderByKey().equalTo(myParentNode).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String saveNode = dataSnapshot.getKey();
mDatabaseReference2 = FirebaseDatabase.getInstance().getReference(saveNode).child("Ordered");
mDatabaseReference2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren()) {
Model1 model2 = postSnapshot.getValue(Model1.class);
mModel2.add(model2);
}
mAdapter2.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(Manageordergrocery.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
有人能帮助我吗?我还是firebase的新手,不知道该怎么做。
解决方案
要获取这两个密钥,您可以执行以下操作:
mDatabaseReference2 = FirebaseDatabase.getInstance().getReference("User");
mDatabaseReference2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren())
{
String myParentNode = postSnapshot.getKey();
mDatabaseReference = FirebaseDatabase.getInstance().getReference();
mDatabaseReference.orderByKey().equalTo(myParentNode).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot posts :dataSnapshot.getChildren())
{
String key = posts.getKey();
if(key.equals(myParentNode))
Toast.makeText(Manageordergrocery.this,"equals", Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(Manageordergrocery.this, databaseError.getMessage(), Toast.LENGTH_LONG).show();
}
});
这里首先添加对节点的引用,User
然后在该节点内循环并检索key
using getKey()
。之后,您将另一个侦听器附加到根位置并使用orderByKey().equalTo(myParentNode)
您可以检查您是否有两个具有相同值的键并执行所需的操作。
推荐阅读
- keras - 如何在 keras 中使用带有 Convolution1D 层的遮罩?
- amazon-web-services - 没有 SNS 的 aws codepipeline 通知?
- php - 如何将 php 网站连接到 node.js 多人游戏
- angular - 如果 x 是 Angular 组件,则验证它在该模块中的部分
- javascript - 如何使用 Next.js Router.push 传递初始状态?
- python - NN Keras 回归:训练和预测的不同输入
- iis - 使用 ADFS 保护启用了 IIS 10 WebDav 的虚拟文件夹
- android - 如何解决“调用目标引发异常”
- github - 如何使用自定义域在 github 页面上运行几个站点
- ios - 自定义 UISwitch 设计