我目前在我的Firebase实时数据库中有一个用户集合,该集合包含我的所有用户,一个集合包含书名和评分(上下大拇指的次数)。我正在尝试制作一个能够持续显示书名(或数据库中的书名)的应用程序,以便人们对其进行评分,但是我需要能够检查用户是否已经查看过该书名(这是我需要帮助的部分。有人可以帮助我从Firebase中提取数据并进行比较以查看用户是否已查看此书名。这就是我的数据库设置
如果有人有更好的方法,请解释!!!
答案 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);
}