【问题标题】:Problem with loading updated data from Firestore in a Fragment在 Fragment 中从 Firestore 加载更新数据的问题
【发布时间】:2019-12-19 20:17:03
【问题描述】:

我有一个 Fragment 更新 Firestore 中的一个字段,然后在更新后打开下一个 Fragment。更新后的数据应该显示在两个 TextView 中,但目前我用来从 Firestore 检索日期的方法是加载旧数据,而不是来自之前的 Fragment 更新数据。

新的 Fragment 似乎打开太快了,所以它仍然从 Firestore 读取旧数据,我该如何实现它检索更新的数据?

我已经尝试在 onViewCreatedonStart 方法中调用 Fragment 2 中的方法,但它也在那里获取旧数据:

这是我的第一个 Fragment,它在打开下一个 Fragment 之前更新 Firestore 中的字段:(我在 onClickmethod 中调用下面的方法)


...

gamesRef.document(gameId).update(currentUserUid, pointsPlayer1Str)
                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task) {
                                                ((GameActivity) getActivity()).setViewPager(7);
                                            }
                                        });

...

我尝试在onCreateView 中检索第二个Fragment 中的更新数据:

...
gameRef.document(gameId).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document != null) {
                        pointsPlayer1Str = document.getString(currentUserUid);
                        pointsPlayer2Str = document.getString(uidPlayer2);

                        textViewPointsCurrentUser.setText(pointsPlayer1Str);
                        textViewPointsOpponent.setText(pointsPlayer2Str);
                    }
                }
            }
        });
...

我应该在哪里调用第二个片段的方法来获取更新的数据?

非常感谢任何帮助!

【问题讨论】:

  • 您能发布您的视图寻呼机配置吗?
  • 或者,您可以使用addSnapshotListener 将实时侦听器附加到您的数据。见firebase.google.com/docs/firestore/query-data/listen
  • @Christilyn 谢谢你的提示,这对我有用。当您将其发布为答案时,我可以接受它
  • 很高兴我能帮上忙。我已经编辑了我的帖子以获得正确答案。

标签: android firebase android-fragments google-cloud-firestore


【解决方案1】:

您可以将实时侦听器附加到您的数据,而不是使用以下内容:

val docRef = gameRef.document(gameId)
docRef.addSnapshotListener { snapshot, e ->
    if (e != null) {
        Log.w(TAG, "Listen failed.", e)
        return@addSnapshotListener
    }

    if (snapshot != null && snapshot.exists()) {
        Log.d(TAG, "Current data: ${snapshot.data}")
    } else {
        Log.d(TAG, "Current data: null")
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 2021-12-18
    • 2016-07-22
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2023-01-19
    • 2020-05-05
    相关资源
    最近更新 更多