【问题标题】:Firebase Database for Unity3d Android ValueChanged unsubscribe issuesFirebase Database for Unity3d Android ValueChanged 退订问题
【发布时间】:2018-11-02 13:50:56
【问题描述】:

Unity3d SDK 有问题。 我订阅了 ValueChanged 事件,当它第一次调用时,我取消了处理程序的订阅。 在 Unity 中一切正常。 但是当我为 Android 构建项目时,取消订阅失败:取消订阅后我仍然在处理程序中处理事件。 代码如下:

public void CheckUserExists()
{
    FirebaseDatabase.DefaultInstance
        .GetReference("users").Child(primary_key)
        .ValueChanged += CheckUserExistsHadler;
}

void CheckUserExistsHadler(object sender, ValueChangedEventArgs e)
{
    FirebaseDatabase.DefaultInstance
        .GetReference("users").Child(primary_key)
        .ValueChanged -= CheckUserExistsHadler;

    if (e.Snapshot == null || e.Snapshot.Value == null)
    {
        print("user_exists");
    }
    else
    {
        print("user_not_exists");
    }
}

【问题讨论】:

  • primary_key 函数中的错误或 primary_key 已更改?

标签: android database firebase unity3d


【解决方案1】:

感谢您的提示。我改成

user_reference = FirebaseDatabase.DefaultInstance.GetReference("users").Child(primary_key); 
...
user_reference.ValueChanged += CheckUserExistsHadler; 
...
user_reference.ValueChanged -= CheckUserExistsHadler; 

效果很好

【讨论】:

    【解决方案2】:

    我刚刚在 Android 上遇到了这个问题,在编辑器中工作。

    我发现,当我在取消订阅时重新创建数据库引用时,使用与添加侦听器完全相同的引用字符串,它不会在 Android 中正确取消订阅。

    我使用的解决方案与上面的 Bestlis 相同,我创建了一个 DatabaseReference 变量,我曾经从它进行 sub 和 un-sub ,现在它可以工作了。

    这是一个奇怪的问题,就像FirebaseDatabase.DefaultInstance.GetReference在运行过程中发生变化?

    【讨论】:

    • 基本上,当文档说它们是短暂的并且出于取消订阅的目的而等效时,他们是在对我们撒谎 :) ? “您以后可以使用具有相同路径的任何 DatabaseReference 取消订阅事件。DatabaseReference 实例是短暂的,可以被视为访问任何路径和查询的一种方式。” NOOOOOOO!!!
    【解决方案3】:

    由于某种原因,任何从回调发出的 firebase 调用都会失败(Getvalue、updatechildren、订阅/取消订阅等等)。最好的办法是将其放入动作队列中,并让单一行为检查队列/列表并从主线程调用其内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多