java - 如何获取 firebase 数据库中的特定键并比较它们是否相同?

标签 java android firebase firebase-realtime-database

我一直在使用 firebase 制作一个交付系统应用程序的项目。 Firebase Database

问题:在这张图片中,我需要获取这两个键(或我认为的父键)并将它们存储在一个字符串中,或​​者如果可能的话我只是想知道是否可以检查 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 新手,不知道该怎么做。

最佳答案

要获取两个 key ,您可以执行以下操作:

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 的引用,然后在该节点内循环并使用 getKey() 检索 key。之后,您将另一个监听器附加到根位置并使用 orderByKey().equalTo(myParentNode) 您可以检查是否有两个具有相同值的键并执行所需的操作。

关于java - 如何获取 firebase 数据库中的特定键并比较它们是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56232318/

相关文章:

iphone - 在 Swift 3 中从 Firebase 数据库检索数据,问题

java - 如何在java中将接口(interface)注入(inject)类?

ios - 离线查询数据-实时数据库的实现及功能

java - FileNotFoundException 起始 jar - 在资源文件夹中看不到文件

android - ActionBarSherlock 旧标题栏在旧版 Android 上仍然可见

android - Dealing with Large Bitmaps(平铺小位图来创建墙纸)

android - 自动完成 TextView : AfterTextChange and OnItemClick working together

java - 将 Firebase 管理员添加到 Java 应用程序

java - Hibernate 二级缓存返回陈旧数据(有时)

java - 使用 wsimport 生成客户端 Web 服务代码时出现空类