猿问

Android Firestore 将文档引用数组转换为 List<Pojo>

在我的 Firestore 中,我有一个users集合,其中的文档可以有一个bookmarks字段,它是一个引用数组:

这些引用中的每一个都指向teachers集合中的一个文档:

http://img2.mukewang.com/6102618600013d0e12710512.jpg

在我的 Android 应用程序中,我想创建一个方法getBookmarks,该方法返回一个ListPOJO,每个 POJO 代表一个老师。这是我编码的,但我认为有两个问题:


我无法将 a 返回List<TeacherPojo>到 my callback,因为我正在单独获取每个文档参考

我认为为集合中的每个项目附加一个回调(它的大小由用户控制,用户可以拥有他/她想要的任意数量的书签)可能会对性能产生很大的影响。


public void getBookmarks(@NonNull OnSuccessListener<List<TeacherPojo>> callback) 

{

    checkNotNull(callback);


    // document reference points to the user document which is calling this method

    documentReference.get()

        .addOnSuccessListener((documentSnapshot) -> {

            ArrayList<DocumentReference> teacherReferences = (ArrayList<DocumentReference>) documentSnapshot.get("bookmarks");


            Iterables.forEach(teacherReferences, (documentReference) -> {

            documentReference.get()

                .addOnSuccessListener((teacherSnapshot) -> {

                TeacherPojo teacherPojo = teacherSnapshot.toObject(TeacherPojo.class);


                    // now?

                });

            });

        });

}

有没有更好的方法来编码这种方法,以获得List<TeacherPojo>(并且可能不会对性能产生太大影响)?


慕哥6287543
浏览 130回答 1
1回答

拉风的咖菲猫

是的。请查看以下代码行:FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();if (firebaseUser != null) {&nbsp; &nbsp; String uid = firebaseUser.getUid();&nbsp; &nbsp; rootRef.collection("users").document(uid).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {&nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; public void onComplete(@NonNull Task<DocumentSnapshot> task) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (task.isSuccessful()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DocumentSnapshot document = task.getResult();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (document.exists()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<DocumentReference> list = (List<DocumentReference>) document.get("bookmarks");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<Task<DocumentSnapshot>> tasks = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (DocumentReference documentReference : list) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Task<DocumentSnapshot> documentSnapshotTask = documentReference.get();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tasks.add(documentSnapshotTask);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public void onSuccess(List<Object> list) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Do what you need to do with your list&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (Object object : list) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TeacherPojo tp = ((DocumentSnapshot) object).toObject(TeacherPojo.class);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.d("TAG", tp.getFirstName());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });}所以List<Object> list实际上是包含类型对象的列表TeacherPojo。
随时随地看视频慕课网APP

相关分类

Java
我要回答