gpt4 book ai didi

java - 如何作为方法的结果返回 DocumentSnapShot?

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:26 25 4
gpt4 key购买 nike

一个自定义对象,其参数为(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com