Как получить конкретный ключ в базе данных Firebase и сравнить его, если они одинаковые? - PullRequest
2 голосов
/ 21 мая 2019

Я делал проект с использованием Firebase для приложения системы доставки.Firebase Database

Проблема: На этом изображении мне нужно получить эти два ключа (или, я думаю, родительский) и сохранить их в строке или, если возможно,просто хочу узнать, смогу ли я проверить, есть ли у идентификатора пользователя дубликат.Как проверить, есть ли у этих ключей дубликаты или они существуют, и сохранить их в строке, если она существует.

Обновленный код,

    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 и не знаю, как это сделать.

1 Ответ

3 голосов
/ 21 мая 2019

Чтобы получить два ключа, вы можете сделать следующее:

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, используя getKey(),После этого вы присоединяете другого слушателя к корневому каталогу и, используя orderByKey().equalTo(myParentNode), можете проверить, есть ли у вас два ключа с одинаковым значением и выполняете ли они необходимые действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...