【问题标题】:How do I fix a null reference error when connecting Unity and Firebase? [duplicate]连接 Unity 和 Firebase 时如何修复空引用错误? [复制]
【发布时间】:2021-11-03 16:09:26
【问题描述】:

在我正在构建的 Unity 应用程序中测试登录和注册功能时出现空引用错误。这两个错误实际上是同一行代码,所以我猜测某些东西与 Firebase 的连接不正确。

我正在使用 Unity 2021.1.12f1

这里是相关代码(不想贴太多,希望这足以帮助诊断问题。

public class FirebaseManager : MonoBehaviour
{
    public static FirebaseManager instance;

    public FirebaseAuth auth;
    public FirebaseUser user;

    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(checkDependencyTask =>
        {
            var dependencyStatus = checkDependencyTask.Result;

            if (dependencyStatus == DependencyStatus.Available)
            {
                InitializeFirebase();
            }

private void InitializeFirebase()
    {
        auth = FirebaseAuth.DefaultInstance;

        auth.StateChanged += AuthStateChanged;
        AuthStateChanged(this, null);
    }

public void RegisterButton()
    {
        StartCoroutine(RegisterLogic(registerUsername.text, registerEmail.text, registerPassword.text, registerConfirmPassword.text));
    }

private IEnumerator RegisterLogic(string _username, string _email, string _password, string _confirmPassword)
    {
        if (_username == "")
        {
            registerOutputText.text = "Please enter a username";
        }
        else if (_password != _confirmPassword)
        {
            registerOutputText.text = "Passwords do not match";
        }
        else
        {
            var registerTask = auth.CreateUserWithEmailAndPasswordAsync(_email, _password);

//code continues from here

最后一行是当我单击“注册”按钮时抛出空引用错误的地方。 (在 Login 函数中有类似的代码行会抛出相同的错误,所以我假设 root 是相同的。)

我为解决此问题所做的工作:

  • 验证json文件在Assets文件夹中
  • 重新启动 Unity
  • 删除并重新安装 Firebase 软件包(身份验证、数据库和远程配置)

我真的很茫然,任何帮助将不胜感激。

【问题讨论】:

    标签: c# firebase unity3d


    【解决方案1】:

    在我看来很明显 auth 为 null 并且 InitializeFirebase() 未正确触发。

    【讨论】:

    • 这就是我所在的位置,但我无法弄清楚为什么 auth 为空。有什么想法吗?
    • 可能是 ContinueWith 任务未触发或处于意外状态?可以添加日志来验证条件是否满足(dependencyStatus)
    【解决方案2】:

    String.IsNullOrEmpty(String) Method

    String.Equals Method

    auth 可能为 null,也许这有帮助:

        if (String.IsNullOrEmpty(_username))
        {
          registerOutputText.text = "Please enter a username";
          return;
        }
        
        if (String.IsNullOrEmpty(_password))
        {
          registerOutputText.text = "Please enter a password";
          return;
        }
        
        if (null == auth)
        {
          registerOutputText.text = "auth is null";
          return;
        }        
        
        if (!_password.Equals(_confirmPassword))
        {
          registerOutputText.text = "Passwords do not match";
          return;
        }
        
        var registerTask = auth.CreateUserWithEmailAndPasswordAsync(_email, _password);
    

    【讨论】:

    • 根据您上面的内容,我将这段代码放入更新中: if (null == auth) { Debug.Log("Auth is null");不出所料,结果是 auth 为空……我不明白为什么它不会执行那行代码来初始化 Firebase。有什么想法吗?
    • 可能是没有调用 InitializeFirebase 方法(例如在 Awake 中),因此 auth 保留为未初始化的字段。或者 FirebaseAuth.DefaultInstance 返回 null,但这意味着 auth.StateChanged += AuthStateChanged 不起作用。
    猜你喜欢
    • 2019-02-14
    • 2019-06-25
    • 2017-04-24
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多