Как получить конкретные узлы под уникальными ключами в базе данных FireBase в реальном времени Android - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь получить данные от вложенных узлов по уникальным ключам. Каждый ключ идентичен. Мне сложно разобраться с такой проблемой, помогите пожалуйста.

Я пытался использовать ChildEventListener для ссылки на базу данных, но не удалось.

вот код, который я использую для получения данных

InfoFragment.java

auth = FirebaseAuth.getInstance();
    mFirebaseDatabase = FirebaseDatabase.getInstance().getReference("Seller").getRef().child("ImpInfo");

    mFirebaseDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postDataSnapshot : dataSnapshot.getChildren()) {
                ShopSellerInfo shopSellerInfo = postDataSnapshot.getValue(ShopSellerInfo.class);
                mShopSellerInfo.add(shopSellerInfo);

            }
            mNearBySellerAdapter = new NearBySellerAdapter(getContext(), mShopSellerInfo);
            mRecyclerView.setAdapter(mNearBySellerAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
    return rootView;`

ShopSellerInfo.java

public ShopSellerInfo(String shopAddress, String shopPhoneNo, String 
shopImageUrl, String shopName) {
    this.shopAddress = shopAddress;
    this.shopPhoneNo = shopPhoneNo;
    this.shopImageUrl = shopImageUrl;
    this.shopName = shopName;

}

public ShopSellerInfo() {

}


public String getShopAddress() {
    return shopAddress;
}


public String getShopPhoneNo() {
    return shopPhoneNo;
}

public String getShopImageUrl() {
    return shopImageUrl;
}

public String getShopName() {
    return shopName;
}

public void setUserAddress(String shopAddress) {
    this.shopAddress = shopAddress;
}

public void setUserPhoneNo(String shopPhoneNo) {
    this.shopPhoneNo = shopPhoneNo;
}

public void setImageUrl(String shopImageUrl) {
    this.shopImageUrl = shopImageUrl;
}

public void setShopName(String shopName) {
    this.shopName = shopName;
}

}

Это структура моей базы данных

enter image description here

У меня есть определенный узел в каждом уникальном ключе, который содержит данные. Я хочу получить эти данные из каждого дочернего узла и показать их в одном действии.

1 Ответ

0 голосов
/ 23 января 2019

Вы не слишком далеко, просто несколько ошибок.Следующее ближе к тому, что вам нужно:

mFirebaseDatabase = FirebaseDatabase.getInstance().getReference("Seller");

mFirebaseDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot sellerSnapshot : dataSnapshot.getChildren()) {
            DataSnapshot impInfoSnapshot = sellerSnapshot.child("ImpInfo");
            ShopSellerInfo shopSellerInfo = impInfoSnapshot.getValue(ShopSellerInfo.class);
            mShopSellerInfo.add(shopSellerInfo);
            mNearBySellerAdapter = new NearBySellerAdapter(getContext(), mShopSellerInfo);
            mRecyclerView.setAdapter(mNearBySellerAdapter);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

Изменения:

  • Удален вызов на .getRef(), который не нужен и, как правило, анти-шаблон.
  • Удален вызов на .child("ImpInfo") из DatabaseReference, так как /Seller/ImpInfo нет.
  • Добавлен .child("ImpInfo") в цикле, поскольку вы хотите, чтобы ImpInfo являлся дочерним элементом каждого снимка.
  • Выдает ошибку, если срабатывает onCancelled, так как игнорировать ошибки - плохая практика.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...