【问题标题】:Unable to call method FirebaseApp.delete()无法调用方法 FirebaseApp.delete()
【发布时间】:2019-07-22 09:06:17
【问题描述】:

我正在尝试删除 secondaryApp 代码,因为我想阻止函数 firebaseAuth.createUserWithEmailAndPassword(email,password) 在创建用户后自动登录

我参考了下面的代码:

FirebaseOptions.Builder fbo = new FirebaseOptions.Builder();
    fbo.setApiKey("YOUR_WEB_API_KEY");
    fbo.setDatabaseUrl("https://[YOUR_PROJECT_ID].firebaseio.com/");
    fbo.setProjectId("YOUR_PROJECT_ID");
    fbo.setApplicationId("YOUR_APP_ID"); //Tested, App Id is required.
    FirebaseOptions firebaseOptions = fbo.build();
    final FirebaseApp secondaryAuth = FirebaseApp.initializeApp([JAVA_CLASS_NAME].this, firebaseOptions, "secondary_db_auth");

它可以工作,但是当我尝试调用该方法时

secondaryAuth.delete()

它返回一个错误,说明无法调用该方法,如下图所示。

我已经检查了来自 firebase [FirebaseApp.delete()][2] 的文档,并希望它能够正常工作,但事实并非如此。其他一切都解决了,只是 delete() 不工作

https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/FirebaseApp

整个代码实现如下:

private void CreateAccount() {
        String name = username.getText().toString();
        String phone = phoneNumber.getText().toString();
        String email = emailAddress.getText().toString();
        String password = passwordTxt.getText().toString();
        String confirmPassword = confirmPasswordTxt.getText().toString();
        String points = pointsTransfer.getText().toString();
        final DatabaseReference RootRef;
        final FirebaseAuth firebaseAuth;

        FirebaseOptions.Builder fbo = new FirebaseOptions.Builder();
        fbo.setApiKey("YOUR_WEB_API_KEY");
        fbo.setDatabaseUrl("https://[YOUR_PROJECT_ID].firebaseio.com/");
        fbo.setProjectId("YOUR_PROJECT_ID");
        fbo.setApplicationId("YOUR_APP_ID"); //Tested, App Id is required.
        FirebaseOptions firebaseOptions = fbo.build();
        final FirebaseApp secondaryAuth = FirebaseApp.initializeApp([JAVA_CLASS_NAME].this, firebaseOptions, "secondary_db_auth");

        RootRef = FirebaseDatabase.getInstance().getReference().child("Users");
        firebaseAuth = FirebaseAuth.getInstance(secondaryAuth);


        if(TextUtils.isEmpty(name)){
            Toast.makeText(this, "Please insert your user name.", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(phone)){
            Toast.makeText(this, "Please insert your phone number.", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(email)){
            Toast.makeText(this, "Please insert your phone number.", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(password)){
            Toast.makeText(this, "Please insert your password.", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(confirmPassword)){
            Toast.makeText(this, "Please insert your password again.", Toast.LENGTH_SHORT).show();
        }
        else if(!password.equals(confirmPassword)){
            Toast.makeText(this, "Password does not match.", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(points)){
            Toast.makeText(this, "You need to send some points", Toast.LENGTH_SHORT).show();
        }
        else if(Float.parseFloat(currentUser.getPoints())<Float.parseFloat(points)){
            Toast.makeText(this, "You do not have sufficient points.", Toast.LENGTH_SHORT).show();
        }
        else{
            loadingBar.setTitle("Create Account");
            loadingBar.setMessage("Please wait, we are checking the credentials.");
            loadingBar.setCanceledOnTouchOutside(false);
            loadingBar.show();

            ValidateAccount(name, phone,email, password, confirmPassword,points, RootRef, firebaseAuth);
            secondaryAuth.delete();
        }
    }

【问题讨论】:

  • 这可能与您拨打电话的位置有关。你能把你写这段代码的功能代码展示出来吗?

标签: java android firebase firebase-authentication firebase-app-indexing


【解决方案1】:

就我在reference documentation 中看到的而言,没有方法FirebaseApp.delete()

一旦您创建了FirebaseApp 实例,它将在该应用的整个生命周期内一直存在。鉴于FirebaseApp 实例非常轻量级,这通常不成问题。

但他们当然可以保留更昂贵的资源,例如服务实例。如果这是您的应用所关心的问题,请务必隔离名称应用实例及其服务的使用,以便在不再需要它们时进行垃圾回收。


听起来您想检测您是否已经初始化了FirebaseApp,您可以通过调用getApps()、循环遍历结果并检查每个结果的name 来做到这一点。或者,您可以调用 getInstance("secondary_db_auth") 并处理它在应用实例尚不存在时引发的异常。

【讨论】:

  • 所以上面的函数在没有第一次实现delete()的情况下工作。但是,当我第二次尝试运行时,它会引发异常错误。 **java.lang.IllegalStateException:FirebaseApp 名称 secondary_db_auth 已经存在! **
  • 根据阅读我链接的参考文档,我在答案中添加了更多信息。
  • 是的,我已经尝试了您提供的上述解决方案并且它有效。
猜你喜欢
  • 1970-01-01
  • 2021-01-02
  • 2013-10-19
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 2023-04-11
  • 2021-02-16
  • 1970-01-01
相关资源
最近更新 更多