如果另一个集合中的另一个值为true,则从Firebase获取值

时间:2018-08-15 09:53:19

标签: java android firebase firebase-realtime-database

我目前在我的Firebase实时数据库中有一个用户集合,该集合包含我的所有用户,一个集合包含书名和评分(上下大拇指的次数)。我正在尝试制作一个能够持续显示书名(或数据库中的书名)的应用程序,以便人们对其进行评分,但是我需要能够检查用户是否已经查看过该书名(这是我需要帮助的部分。有人可以帮助我从Firebase中提取数据并进行比较以查看用户是否已查看此书名。这就是我的数据库设置enter image description here

如果有人有更好的方法,请解释!!!

2 个答案:

答案 0 :(得分:0)

首先,将books_viewed更改为数组。阅读this,了解Firebase Realtime数据库中的阵列

现在它是一个数组,您可以在应用程序中将其作为ArrayList<String>来获取。

public class User {
    public ArrayList<String> booksViewed;
    ... // Other variables
}

然后只需使用contains函数来检查您要查找的书是否在该列表中

DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("Users").child("<UserID>")

userRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        User user = dataSnapshot.getValue(User.class);
        String bookTitleYouAreChecking = "Twilight"    
        if (user.booksViewed.contains(bookTitleYouAreChecking)) {
            // User has viewed
        } else { 
            // User has not viewed
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // ...
    }
})

答案 1 :(得分:0)

要解决此问题,请使用以下方法检查用户是否看过书:

private void checkBookTitle(String bookTitle) {
    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference ref = rootRef.child("Users").child(uid).child("books_viewed");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()) {
                Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    if (entry.getValue().equals(bookTitle)) {
                        Log.d(TAG, "User has viewed this book");
                    } else {
                        Log.d(TAG, "User has not viewed this book");
                    }
                }
            }
        }

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