java - 如何返回带有回调的文档快照对象并实际上能够访问/将其传递给其他层?
问题描述
我目前正在研究一个 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);
}
解决方案
推荐阅读
- r - 如何在 R 中绘制稀疏矩阵?
- r - How do I subset a list with mixed data type and data structure?
- elasticsearch - Elasticsearch term query to number token
- angular - 网站没有在服务器上加载,同时从浏览器以角度 2 刷新它
- python - 如何读取缺少值和'delim_whitespace = True'的csv文件?
- javascript - Change state/prop in video react-native-video component
- python - 有没有办法可以在 sqlite3 数据库中找到随机表的同一行?
- html - 当窗口变小时如何修复网站中的空白
- pyspark - 为什么聚合函数 pyspark.sql.functions.collect_list() 在显示上添加本地时区偏移量?
- navigation - 如何仅允许 Here API 中的某些链接 ID 导航(使用自定义路由或其他方式)?