Как получить дочерние ценности из "ресторанов" в Android Firebase? Я получаю нулевые значения - PullRequest
0 голосов
/ 05 июля 2018

Как получить дочерние ценности из "ресторанов" в Android Firebase? Я получаю нулевые значения

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    database.getReference().child("restaurants").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ArrayList<RestaurantDetails> foodItems = new ArrayList<>();
            Iterable<DataSnapshot> iterable = dataSnapshot.getChildren();
            for(DataSnapshot child : iterable){
                foodItems.add(
                        new RestaurantDetails(
                                child.getKey(),
                                child.child("name").getValue().toString(),
                                selectedCategory,
                                Double.parseDouble(child.child("ratings").getValue().toString()),
                                child.child("imageurl").getValue().toString(),
                                child.child("description").getValue().toString(),
                                Integer.parseInt(child.child("count").getValue().toString())
                        )
                );
                Log.d(child.getKey(),child.getValue().toString());
            }
            recyclerView.setAdapter(shoplistItemArrayAdapter);
            progressDialog.cancel();
        }

enter image description here

1 Ответ

0 голосов
/ 05 июля 2018

Нет необходимости создавать новый объект класса RestaurantDetails, потому что вы получаете его из базы данных. Чтобы решить эту проблему, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference restaurantsRef = rootRef.child("restaurants");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            RestaurantDetails restaurantDetails = ds.getValue(RestaurantDetails.class);
            Log.d("TAG", restaurantDetails.getDescription());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
restaurantsRef.addListenerForSingleValueEvent(valueEventListener);

Вывод в вашем logcat будет:

Biryani,Chinese,North Indian,South India
Indian,Chines,Byran

Если вы хотите использовать класс String вместо RestaurantDetails, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference restaurantsRef = rootRef.child("restaurants");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String description = ds.child("description").getValue(String.class);
            Log.d("TAG", description);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
restaurantsRef.addListenerForSingleValueEvent(valueEventListener);

Вывод будет таким же.

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