Как получить только один pushId - PullRequest
0 голосов
/ 25 июня 2018

Здесь есть случайно сгенерированные pushId для конкретной задачи, в которой есть UID для получателя и отправителя.Я генерирую этот pushId из одного Activity, теперь я хочу получить этот pushId из другого класса или фрагмента.Я использовал onChildAdded вот так, чтобы получить pushId, чтобы я мог получить данные конкретного пользователя:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Challenge");
                databaseReference.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        String key = dataSnapshot.getKey();

При использовании этого метода он дает мне pushId, но проблема в том, что он получает все присутствующие pushId вУзел «Challenge», но я хочу получить только один pushId по запросу.Есть ли способ, чтобы я мог получить только один pushId не все, как для challenge1 Я хочу только 1-й pushId и для challenge2 2-й pushId и так далее.Пожалуйста, помогите мне.

enter image description here

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Если вы хотите получить первый pushid, вам нужно использовать addListenerForSingleValueEvent и пример запроса orderByChild:

 DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Challenge");

reference.orderByChild("timeChallengeMinute").equalTo("58").addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot dataSnapshot) {
   for(DataSnapshot datas: dataSnapshot.getChildren()){
        String keys=datas.getKey();
     }
  }
@Override
 public void onCancelled(DatabaseError databaseError) {
   }
 });

addListenerForSingleValueEvent будет считывать данные один раз, и когда вы будете использовать запрос типа orderByChild, вы сможете получить соответствующие данные. Выше будет извлекать pushid where timeChallengeMinute ="58"

0 голосов
/ 25 июня 2018

Есть два способа добиться этого. Во-первых, нужно сохранить этот выдвинутый идентификатор, как только он будет сгенерирован, и использовать его позже, когда это необходимо в вашей ссылке. Поэтому при добавлении объекта Challange в базу данных используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference challangeRef = rootRef.child("Challange");
String key = challangeRef.push().getKey();
challangeRef.child(key).setValue(yourChallangeObject);

Как только это key сгенерировано, вы можете использовать его, когда вам это нужно в вашей деятельности.

Как @PeterHaddad также упомянул в своем ответе, другой подход заключается в использовании Query. Таким образом, вы должны добавить свойство fixed под каждым объектом вызова, чтобы вы могли запрашивать базу данных в соответствии с ним. Я рекомендую вам добавить id пользователя, который создал вызов. Запрос в этом случае должен выглядеть так:

Query query = challangeRef.orderByChild("uid").equalTo(uid).addListenerForSingleValueEvent(/* ... */);
0 голосов
/ 25 июня 2018

Чтобы сделать это, просто сделайте это, сначала обратитесь к Challenge, а затем просто переберите все дочерние элементы в этом конкретном узле, а затем просто получите ключ каждого дочернего элемента с помощью getKey()

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Challenge");
                databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){

          String pushid = snapshot.getKey();


 }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();

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