【问题标题】:Why is my Firebase query giving inconsistent results?为什么我的 Firebase 查询给出的结果不一致?
【发布时间】:2021-10-13 04:50:11
【问题描述】:

这里的第一个问题,如果格式不正确,请见谅。

我正在使用 Unity 和 Firebase 开发应用程序。当我尝试从数据库中检索数据时,当数据库中存在数据时,似乎随机不会检索到数据。有时(很难说多久)完全相同的代码会通过检索数据产生正确的结果。

初始化似乎有一些问题,因为如果我调用该方法一次并且它没有检索任何数据,它会一直这样做,直到我开始一个新会话。因此,无论它做什么(工作或不工作)都会在每个会话期间保持一致。

顺便说一句,当我说“不工作”时,我的意思是“故事”变量没有子级。在这种情况下,我希望它有 5 个孩子。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Extensions;
using Firebase.Auth;

public class firebasetest : MonoBehaviour
{
    FirebaseDatabase db;
    DatabaseReference dbReference;
    FirebaseAuth user;

    // Start is called before the first frame update
    void Start()
    {
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
        {

            user = Firebase.Auth.FirebaseAuth.DefaultInstance;
            dbReference = FirebaseDatabase.DefaultInstance.RootReference;

            db = FirebaseDatabase.DefaultInstance;
            GetStories();
        });
    }

    public void GetStories()
    {
        db.GetReference("stories").OrderByChild("postDate").LimitToFirst(100).GetValueAsync().ContinueWithOnMainThread(task =>
        {
            DataSnapshot stories = task.Result;

            // Create new StoryPanel object for each story retrieved
            foreach (var child in stories.Children)
            {
                Debug.Log(child.Child("title").Value);
            }
        });
    }
}

这是数据的样子

【问题讨论】:

  • 在 Stack Overflow 上,请不要显示文字和代码的图片。将文本复制到问题本身并将其格式化为easy to read, copy, and search。您可以使用底部的编辑链接编辑问题以更正此问题。
  • 感谢您的提示。

标签: c# firebase unity3d firebase-realtime-database


【解决方案1】:

嘿,我以前遇到过这个问题,Firebase 似乎在缓存中保存了旧版本的数据库。您需要使用KeepSynced(true) 试试这个,让我知道这是否有效-

 public void GetStories()
{
        DatabaseReference dtr = FirebaseDatabase.DefaultInstance.GetReference("stories");
                dtr.KeepSynced(true); dtr.OrderByChild("postDate").LimitToFirst(100).GetValueAsync().ContinueWithOnMainThread(task =>
    {
        DataSnapshot stories = task.Result;

        // Create new StoryPanel object for each story retrieved
        foreach (var child in stories.Children)
        {
            Debug.Log(child.Child("title").Value);
        }
    });
}

【讨论】:

  • 谢谢,看起来可行。
猜你喜欢
  • 1970-01-01
  • 2015-05-05
  • 2021-06-02
  • 2012-02-17
  • 2015-05-15
  • 2012-06-22
  • 2011-01-14
  • 2016-08-06
  • 1970-01-01
相关资源
最近更新 更多