简体   繁体   中英

Retrieve a child of a child in the Firebase Recycler View

Gettin the child "sonyTV" in the Firebase Recycler View.

the problem : this child is not a direct child of "Users"

我的资料库

Got the name and the date ,but not "sonyTV"

  @Override
        protected void onBindViewHolder(@NonNull UsersViewHolder usersViewHolder, int i, @NonNull ALL_USERS all_users) {
            usersViewHolder.setName(all_users.getName());
            usersViewHolder.setDate(all_users.getDate());
            usersViewHolder.setUserSoldItems(all_users.getUserSoldItems());

setUserSoldItems method

   public void setUserSoldItems(ALL_USERS.UserSoldItems userSoldItems) {

            TextView SonyTvView = mView.findViewById(R.id.showTVsony);
            SonyTvView.setText("Sony TV : "+userSoldItems);
        }

ALL_USERS class

public class ALL_USERS {
    private String name;
    private long date;
    private UserSoldItems userSoldItems;



    public ALL_USERS() {}

    public ALL_USERS(String name, long date, UserSoldItems userSoldItems) {
        this.name = name;
        this.date = date;
        this.userSoldItems = userSoldItems;

    }


    public String getName() { return name; }
    public long getDate() { return date; }
    public UserSoldItems getUserSoldItems() { return userSoldItems; }

    public class UserSoldItems {

        private long sonyTV;

        public UserSoldItems() {}

        public UserSoldItems(long sonyTV) {
            this.sonyTV = sonyTV;
        }

        public long getSonyTV() { return sonyTV; }
    }
}

but it gives me null values, although you can check it in my database its not null

This is how i post to child("sonyTV")

 users.child(user.getUid()).child("UserSoldItems").child("sonyTV").runTransaction(new Transaction.Handler() {
                @NonNull
                @Override
                public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                    Long value = mutableData.getValue(Long.class);
                    if (value == null) {
                        mutableData.setValue(0);
                    }
                    else {
                        mutableData.setValue(value + 1);
                    }

                    return Transaction.success(mutableData);
                }



                @Override
                public void onComplete(DatabaseError databaseError, boolean b,
                                       DataSnapshot dataSnapshot) {
                }
            });

According to your question:

Dear Alex i have one more thing i cant get the child sonyTV in the RecyclerView ,is it beacause its not a direct child of Users node ??!!!

Now seeing what you are trying to achieve, the simplest solution I can think of is to add an extra property of type UserSoldItems in your User class. So your User class should look like this:

public class ALL_USERS {
    private String name;
    private long date;
    private UserSoldItems userSoldItems;

    public ALL_USERS() {}

    public ALL_USERS(String name, long date, UserSoldItems userSoldItems) {
        this.name = name;
        this.date = date;
        this.userSoldItems = userSoldItems;
    }

    public String getName() { return name; }
    public long getDate() { return date; }
    public UserSoldItems getUserSoldItems { return userSoldItems; }
}

And the UserSoldItems should look like this:

public UserSoldItems {
    private long sonyTV;

    public UserSoldItems() {}

    public UserSoldItems(int sonyTV) {
        this.sonyTV = sonyTV;
    }

    public long getSonyTV() { return sonyTV; }
}

Or even simpler:

public UserSoldItems {
    public long sonyTV;
}

And please note, the name of the node should be UserSoldItems and not User Sold Items in order to make it work. So it should not contains any spaces. So when adding data, please add it without any space. In the end, just clear the actual data from the database and add fresh one.

So we introduced a new UserSoldItems level in your JSON tree, so you we can ensure that your Java classes reflect that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM