- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
一个自定义对象,其参数为(DocumentSnapShot documentsnapShot)。也是来自 Firebase 的一个内部对象,它检索快照并将值设置为我的自定义模型也有它的参数(DocumentSnapShot documentsnapShot)。但是,我希望从 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/48499310/
一个自定义对象,其参数为(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(); 我正在尝试这种方
我是一名优秀的程序员,十分优秀!