Android   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了java – 如何通过方法返回DocumentSnapShot?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

带有(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()方法调用方法,并将该对象作为参数传递.所以快速解决这个问题:

@Override
public void onsuccess(DocumentSnapshot documentSnapshot) {
    UserAccountSetTings setTings = documentSnapshot.toObject(UserAccountSetTings.class);
    yourMethod(setTings);
}

所以请记住,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?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: