- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(DocumentSnapShot 文档napShot)。但是,我希望从 Firebase 获取数据并将其传递给我的自定义参数,因为我的数据不仅需要 Firebase,还需要多个数据。并且无法在没有覆盖的情况下迭代 Firestore。
代码如下:
public UserSettings getUserSettings(DocumentSnapshot documentSnapshot){
Log.d(TAG, "getUserSettings: retrieving user account settings from firestore");
DocumentReference mSettings = mFirebaseFirestore.collection("user_account_settings").document(userID);
mSettings.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
UserAccountSettings settings = documentSnapshot.toObject(UserAccountSettings.class);
settings.setDisplay_name(documentSnapshot.getString("display_name"));
settings.setUsername(documentSnapshot.getString("username"));
settings.setWebsite(documentSnapshot.getString("website"));
settings.setProfile_photo(documentSnapshot.getString("profile_photo"));
settings.setPosts(documentSnapshot.getLong("posts"));
settings.setFollowers(documentSnapshot.getLong("followers"));
settings.setFollowing(documentSnapshot.getLong("following"));
}
});
}
最佳答案
您现在无法返回尚未加载的内容。 Firestore 异步加载数据,因为这可能需要一些时间。根据您的连接速度和状态,可能需要几百毫秒到几秒的时间才能获得数据。如果要将 settings
对象传递给另一个方法,只需在 onSuccess()
方法中调用该方法并将该对象作为参数传递即可。因此,快速修复方法如下:
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
UserAccountSettings settings = documentSnapshot.toObject(UserAccountSettings.class);
yourMethod(settings);
}
One more thing to mention is that you don't need to set the those values to object that already have them. You are already getting the data from the database as an object.
所以请记住,onSuccess()
方法具有异步行为,这意味着甚至在您从数据库获取数据之前就会调用该方法。如果您想在该方法之外使用 settings
对象,则需要创建自己的callback
。要实现这一点,首先您需要创建一个如下所示的界面:
public interface MyCallback {
void onCallback(UserAccountSettings settings);
}
然后您需要创建一个实际从数据库获取数据的方法。该方法应如下所示:
public void readData(MyCallback myCallback) {
DocumentReference mSettings = mFirebaseFirestore.collection("user_account_settings").document(userID);
mSettings.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
UserAccountSettings settings = documentSnapshot.toObject(UserAccountSettings.class);
myCallback.onCallback(settings);
}
});
}
最后只需调用 readData()
方法,并在需要的地方将 MyCallback
接口(interface)的实例作为参数传递,如下所示:
readData(new MyCallback() {
@Override
public void onCallback(UserAccountSettings settings) {
Log.d("TAG", settings.getDisplay_name());
}
});
这是您可以在 onSuccess()
方法之外使用 UserAccountSettings
类的对象的唯一方法。欲了解更多信息,您还可以看看这个 video 。
关于java - 如何返回 DocumentSnapShot 作为方法的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57979591/
一个自定义对象,其参数为(DocumentSnapShot documentsnapShot)。也是来自 Firebase 的一个内部对象,它检索快照并将值设置为我的自定义模型也有它的参数(Docum
我正在尝试根据用户是否参加调查来显示特定的图标。 目前,我正在使用StreamBuilder侦听文档中的给定值,该文档返回调查名称。然后,我想在下一个StreamBuilder中使用调查名称,该名称将
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
采用 (DocumentSnapShot DocumentsnapShot) 参数的自定义对象。也是来自 Firebase 的内部对象,它检索快照并将值设置为我的自定义模型也有其参数(Document
我使用 Firestore 并有一个带有字段的集合。该字段有多个字符串值: 字段:名称 0:“姓名 1” 1:“姓名 2” 2:“姓名 3” 与 let documentData = document
我想从文档“list_of_clients”中读取每个对象列表并将其导出到我创建的自定义列表 在实时数据库中有一个函数叫做 GenericTypeIndicator 这可以帮助您获取值,这与我想要的类
首先我看到了答案: here但对来自 android 和 angular 的我来说,不得不写这么多代码(在 android 和 angular 中需要一行)加上答案不是最新的,所以想知道现在是否有更好
我正在尝试检查我的 documentSnapshot 中是否存在字段。 我的代码: document.data.containsKey('field_name') 但我得到了: error: The
我无法使用属性 data()在文档快照上。它在控制台中给了我一个错误。这是确切的错误: auth.service.ts(72,20): error TS2339: Property 'data' do
我是刚开始遇到火灾或 flutter 朔迷离的人,我想知道关于读写操作的某些事情 如果在StreamBuilder中我们将DocumentSnapshots列表存储在这样的变量中,final even
我一直在尝试从/ users集合中获取文档数据, 但是问题是我声明了de builder之后: 这是FutureBuiulder的必需参数,数据未通过它,并且我得到data = null。 我究竟做错
我正在组合两个查询来对 Firestore 集合执行“不等于”查询,这在 Firestore 中 native 不可能实现,因此我必须在本地执行此操作。我需要获取组合任务的最后一个可见文档以用于分页。
如何获取 Firestore 中文档的 ID? final String PostKey = db.collection("Anuncio").document().getId(); 我正在尝试这种方
我是一名优秀的程序员,十分优秀!