java– 如何通过方法返回DocumentSnapShot?

java– 如何通过方法返回DocumentSnapShot?,第1张

概述带有(DocumentSnapShotdocumentsnapShot)参数的自定义对象.也是Firebase内部对象检索快照并将值设置为我的自定义模型也有其参数(DocumentSnapShotdocumentsnapShot).但是,我希望从Firebase获取数据并将其传递给我的自定义参数,因为我不仅会获取Firebase的多个数据.如果没有覆盖,

带有(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异步加载数据,因为这可能需要一些时间.根据您的连接速度和状态,可能需要几百毫秒到几秒才能获得数据.如果要将设置对象传递给另一个方法,只需在onSuccess()方法中调用该方法,并将该对象作为参数传递.所以快速解决这个问题:

@OverrIDepublic 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()方法具有异步行为,这意味着甚至在从数据库获取数据之前就会调用它.如果要在该方法之外使用设置对象,则需要创建自己的回调.要实现这一点,首先需要创建一个这样的接口:

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接口的实例作为参数传递到您需要的地方,如下所示:

readData(new MyCallback() {    @OverrIDe    public voID onCallback(UserAccountSettings settings) {        Log.d("TAG", settings.getdisplay_name());    }});

这是在onSuccess()方法之外可以使用UserAccountSettings类的对象的唯一方法.有关更多信息,您还可以查看此video.

总结

以上是内存溢出为你收集整理的java – 如何通过方法返回DocumentSnapShot?全部内容,希望文章能够帮你解决java – 如何通过方法返回DocumentSnapShot?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1104530.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存