无法从 Android 上 Unity 中的 Firebase 快照获取“空”值
Posted
技术标签:
【中文标题】无法从 Android 上 Unity 中的 Firebase 快照获取“空”值【英文标题】:Unable to get a "null" value from Firebase snapshot in Unity on android 【发布时间】:2018-08-06 20:02:29 【问题描述】:我想在 FirebaseRef snapshot.Value == null 时执行 x。这每次都可以在 Unity 编辑器中使用,但是当我在 android 设备上执行此操作时,每次都会失败。该应用程序不会崩溃,它只是不做任何事情。
身份验证工作正常。 数据库工作正常(当值存在时,我会获取所有其他值)但是当值不存在时,这就是我遇到问题的地方。
这是我的 sudo 代码,任何帮助将不胜感激。
ref.Child("Location/That/Doesnt/Exist").GetValueAsync().ContinueWithTask(Task =>
if (task.IsFaulted)
//Do something
else if (task.IsCompleted)
DataSnapshot snap = task.Result;
if(snap.Value == null)
//This is what hangs. I get here and it just does nothing.
);
我很迷茫。我不确定如何解决这个问题。我没有收到任何错误,但这就像函数就停在那里一样。
谢谢大家!
编辑
所以我正在做的解决这个问题是在路径中创建一个 DB 条目,其中 key == "0" 和 value == 0。然后我说如果 ChildCount 大于 1 并且那个孩子有更多超过 1 个孩子,继续。
我觉得这是一个非常糟糕的方法。
【问题讨论】:
Here is a simular javascript question 带有 Android 答案。 答案建议使用 HasChild(var),我也这样做过,甚至尝试过使用“ChildCount > x”。两者都不能在设备上工作,但都可以在 Unity 编辑器中工作。 您是否尝试过使用exists 功能? 是的,我得到了相同的结果。所有在编辑器中工作,但在 android 构建中失败。 【参考方案1】:我遇到了同样的错误。我发现了一个例外,我得到了 NullReference,似乎在 android 上,当它在数据库上找不到时返回 Null,所以你必须转换它:
if(snap.Value == null)
到这里:
if (snap==null && snap.Value==null)
当 snap 对象为 null 时,您正在尝试访问 snap.Value。
对不起我的英语,我希望这对你有帮助。
【讨论】:
试过这个并没有用,但它给了我另一个想法。我将尝试另一种方法,因为我认为您正在做某事。作为记录,我尝试了 DataSnapshot snapshot = task.Result; if (snapshot == null && snapshot.Value == null) popMNG.CreatePop("我们得到的是空位置!", "Wa hoo!", "close", null); 但是,尝试相反,我的意思是,如果你尝试 if (snap==null && snap.Value==null) 那是行不通的,因为你正在访问 snap.Value,当snap 为 null,试试这个: if (snap!=null && snap.Value!=null) //something code else //当它为 null 时你想做什么 【参考方案2】:试试斜杠
“位置/那个/不存在/存在/”
【讨论】:
尾部斜线似乎没有这样做。我得到相同的结果。根据 Firebase 文档,他们也不使用尾随 /。 FirebaseDatabase.DefaultInstance .GetReference("Leaders") .GetValueAsync().ContinueWith(task => if (task.IsFaulted) // 处理错误... else if (task.IsCompleted) DataSnapshot snapshot = task.结果; // 用快照做一些事情... );以上是关于无法从 Android 上 Unity 中的 Firebase 快照获取“空”值的主要内容,如果未能解决你的问题,请参考以下文章
Branch.io SDK 无法在 Unity3D 中的 Android 构建上初始化
无法在 Android 11 (Wi-Fi Direct) 上使用 WifiP2pManager.setDeviceName
构建失败:无法在 Unity 上构建 Android .apk