Mar*_*ark 6 android firebase-realtime-database
我最近开始将我的应用从Parse切换到Firebase.到目前为止,一切都很顺利,但是我无法找到与Parse的whereContainedIn(String键,Collection值)相同的Firebase方法.
这是一个非常有用的方法,它允许我传入一个id数组,它将返回匹配该id的所有行.到目前为止,使用Firebase,我让它返回数据库中的所有行,然后循环遍历它们以查看该行的id是否包含在我的id数组中.另一种方法是单独查询每个id,这对Firebase的异步行为不起作用.这就是我现在为第一种方法所做的事情:
List<String> userIds = new ArrayList<>();
userIds.add("2");
userIds.add("32");
userIds.add("12545");
userIds.add("187");
DatabaseReference firebaseRef = FirebaseDatabase.getInstance().getReference();
Query queryRef = firebaseRef.child("videos");
queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Video> usersVideos = new ArrayList<Video>();
for (DataSnapshot videoSnapshot : dataSnapshot.getChildren()) {
Video video = videoSnapshot.getValue(Video.class);
if (userIds.contains(video.userId)) {
usersVideos.add(video);
}
}
// usersVideos is now populated with the videos for the users
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "CANCELLED");
}
});
Run Code Online (Sandbox Code Playgroud)
这些方法都不合理,因为我的表将包含数十万条记录.
任何帮助将不胜感激!
创建另一个可以查找的引用,userId并让它返回videoIds该用户拥有的所有内容。从那里您可以查询视频。这意味着每次保存时都需要在两个位置保存。有点痛苦,但这是 Firebase 推荐的。
所以你的参考看起来更像是:
videos -
| - <videoId> -
| - <video stuffs>
| - userId
videosByUser -
| - <userId> -
| 0 - <videoIdA>
| 1 - <videoIdB>
| - <userId2> -
| 0 - <videoIdA>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2114 次 |
| 最近记录: |