首页 > 解决方案 > 如何返回带有回调的文档快照对象并实际上能够访问/将其传递给其他层?

问题描述

我目前正在研究一个 android 学校项目,我们有一些用户需要从中访问/传递数据。通常我们会使用 mySQL,但我们必须为这个项目使用 Firebase / Firestore。我需要能够访问一个对象,提取它,并将其转换为 java.class 对象并将其传递给控制器​​。我四处阅读,我需要使用回调来访问“onSucces()”方法之外的数据,但我似乎无法弄清楚。该对象可以在 onCallback 方法中访问,但我需要在 main 方法中返回它,这样我才能返回到我的 Controller。我知道这是一个异步过程,但我只对 Javascript 有经验。代码中的注释解释了我想要做什么,谢谢!

public FirebaseFirestore db;
private static final String TAG = "userLog" ;

@Override
public UserDTO getUser(String userId) {

     readData(new MyCallback() {
        @Override
        public void onCallback(UserDTO user) {
            //Here the userobject is accesible, I can print the data with:
            System.out.println("UserName = " + user.getfName());
            //But THIS userobject I would like to return in this getUser method!
           
            Log.d(TAG, user.toString());
        }
    });
     
    //I need to be able to return the user object here, so I can use it in my Controller!
    return null;
}

public void readData(MyCallback myCallback) {
    DocumentReference docRef = db.collection("users").document(userId);
    docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            UserDTO user = documentSnapshot.toObject(UserDTO.class);
            myCallback.onCallback(user);
        }
    });
}

public interface MyCallback {
    void onCallback(UserDTO user);
}

标签: javaandroidfirebaseasynchronousgoogle-cloud-firestore

解决方案


推荐阅读