О создании случайного ключа под Uid в базе данных firebase в реальном времени с помощью Android studio

# #java #android #firebase #android-studio #firebase-realtime-database

Вопрос:

Я создаю простое приложение, используя Android studio и базу данных firebase в реальном времени. Когда пользователь зарегистрирует свои данные, они будут сохранены под Uid, который предоставляет firebase. Затем я создал еще один узел внутри Uid под названием «ПУТЬ», и я хочу сохранить некоторые данные, которые пользователь предоставляет внутри него. Для этого я хочу создать определенный идентификатор или что-то в этом роде, чтобы он не заменялся каждый раз, когда пользователь вводит новые данные. (Проверьте скриншот)

Это то, что я хочу сделать

Я попытался сделать это с помощью Datasnapshot, но он не реагирует на щелчок. Это то, что я пробовал.

 add_new.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if( !Validate_text() ){
                    return;
                }
                else{
                    //Toast.makeText(getApplicationContext(), picker.getDayOfMonth()   "-"   picker.getMonth()   "-"   picker.getYear(), Toast.LENGTH_SHORT).show();
                // redirect to path

                    String ach = milestone.getEditText().getText().toString().trim();
                    int day = picker.getDayOfMonth();
                    int month = picker.getMonth();
                    int year = picker.getYear();
                    String date = day   "/"   month   "/"   year ;

                    reference.child(uid).child("PATH").addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                            for( DataSnapshot random_key : snapshot.getChildren()) {

                                String key = random_key.getKey();
                                Map<String, Object> updates = new HashMap<String, Object>();
                                updates.put("Achievement : ", ach);
                                updates.put("Date", date);
                                reference.child(uid).child("PATH").child(key).updateChildren(updates).addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void unused) {
                                        Toast.makeText(getApplicationContext(), "Your achievement has been updated.", Toast.LENGTH_LONG).show();
                                        finish();
                                        startActivity(new Intent(AddPath.this, Path.class));
                                    }
                                });
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError error) {
                            Log.v(TAG, error.getMessage());
                        }
                    });
                }

            }
        });

 

Если у кого-нибудь есть идеи, что я здесь сделал не так, или кто может помочь, пожалуйста.

Ответ №1:

Я бы предпочел, чтобы вы построили свою базу данных json примерно так.

 -users
   -userUid
      -name: "Ticherhaz"
      -others: "Master"
   -userUid2
      -name: "Pyke"
      -others: "Bronze"
-path
   -userUid
      -pathUid
         -achievement: "Eat without using hand"
         -date: "12/02/2022"
      -pathUid2
         -achievement: "Wake up early"
         -date: "12/02/2022"
   -userUid2
      -pathUid3
         -achievement: "Feeding team"
         -date: "13/02/2022"
 

Поскольку вы говорите, что хотите создать случайный Uid, вы можете использовать Firebase pushId . Вы можете обратиться сюда, Push-идентификатор Firebase.

     add_new.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if( !Validate_text() ){
                return;
            }
            else{
                String ach = milestone.getEditText().getText().toString().trim();
                int day = picker.getDayOfMonth();
                int month = picker.getMonth();
                int year = picker.getYear();
                String date = day   "/"   month   "/"   year ;

                Map<String, Object> updates = new HashMap<String, Object>();
                updates.put("Achievement : ", ach);
                updates.put("Date", date);

                final String pushId = FirebaseDatabase.getInstance().getReference().push().getKey(); //Create new random Id
                FirebaseDatabase.getInstance().getReference().child("path").child(uid).child(pushId).setValue(updates).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Toast.makeText(getApplicationContext(), "Your achievement has been updated.", Toast.LENGTH_LONG).show();
                        finish();
                        startActivity(new Intent(AddPath.this, Path.class));
                    }
                });
            }
        }
    });
 

Комментарии:

1. Большое вам спасибо @TicherhazFreePalastine . Ваше решение сработало. Я также изменил структуру, как вы упомянули. Еще раз спасибо..