当前位置: 首页 > 知识库问答 >
问题:

应用程序崩溃(与Firebase身份验证相关)

壤驷文华
2023-03-14

这是代码-

    public class login extends AppCompatActivity implements View.OnClickListener {

    private Button signIn;
    private ProgressDialog progressDialog;
    private EditText emailID;
    private EditText password1;
    private TextView emailLabel;
    private TextView passwordLabel;

    private FirebaseAuth firebaseAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        firebaseAuth = FirebaseAuth.getInstance();

        progressDialog = new ProgressDialog(this);

        emailID = (EditText)findViewById(R.id.txtFieldEmailID);
        password1 = (EditText) findViewById(R.id.txtFieldPassword);
        emailLabel = (TextView) findViewById(R.id.labelEmail);
        passwordLabel = (TextView) findViewById(R.id.labelPassword);

        signIn.setOnClickListener(this);
    }

    private void loginUser(){
        String email = emailID.getText().toString().trim();
        String password = password1.getText().toString().trim();

        if(TextUtils.isEmpty(email)){
            //email field is empty
            Toast.makeText(this,"Please enter email",Toast.LENGTH_LONG).show();
            return;
        }

        if(TextUtils.isEmpty(password)){
            //password is empty
            Toast.makeText(this,"Please enter your password",Toast.LENGTH_LONG).show();
            return;
        }

        //if validations are ok
        //show a progressbar
        firebaseAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    public static final String TAG ="";

                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d(TAG, "signInWithEmail:success");
                            FirebaseUser user = firebaseAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w(TAG, "signInWithEmail:failure", task.getException());
                            Toast.makeText(login.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            updateUI(null);
                        }

                        // ...
                    }

                    private void updateUI(FirebaseUser user) {
                        progressDialog.setMessage("User has signed in");
                        progressDialog.show();

                    }
                });




    }

    @Override
    public void onClick(View view) {
        if(view == signIn){
            loginUser();
        }
    }  
  }

启动应用程序时出错-01-13 17:07:13.543 5027-5058/com。实例金纳里。trial2 D/FA:日志记录事件(FE):用户参与(\u e),捆绑[{firebase\u event\u origin(\u o)=自动,参与时间\u毫秒(\u et)=2716,firebase\u screen\u class(\u sc)=主活动,firebase\u screen\u id(\u si)=7572526684473257642}]01-13 17:07:13.734 5027-5027/com。实例金纳里。trial2 D/AndroidRuntime:关闭VM 01-13 17:07:13.737 5027-5027/com。实例金纳里。trial2 E/AndroidRuntime:致命异常:主进程:com。实例金纳里。trial2,PID:5027 java。lang.RuntimeException:无法启动activity ComponentInfo{com.example.kinnari.trial2/com.example.kinnari.trial2.login}:java。lang.NullPointerException:尝试调用虚拟方法“void android”。小部件。按钮android上的空对象引用上的setOnClickListener(android.view.view$OnClickListener)。应用程序。ActivityThread。在android上执行LaunchActivity(ActivityThread.java:2778)。应用程序。ActivityThread。android上的handleLaunchActivity(ActivityThread.java:2856)。应用程序。ActivityThread-android上的wrap11(未知源:0)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1589)。操作系统。处理程序。android上的dispatchMessage(Handler.java:106)。操作系统。活套。android上的loop(Looper.java:164)。应用程序。ActivityThread。java上的main(ActivityThread.java:6494)。朗,反思一下。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodandArgscaler。在com上运行(RuntimeInit.java:438)。Android内部的操作系统。合子岩。main(ZygoteInit.java:807)由:java引起。lang.NullPointerException:尝试调用虚拟方法“void android”。小部件。按钮com上的空对象引用上的setOnClickListener(android.view.view$OnClickListener)。实例金纳里。trial2.login。在android上创建(login.java:46)。应用程序。活动在android上执行创建(Activity.java:6999)。应用程序。活动在android上执行创建(Activity.java:6990)。应用程序。仪器仪表。android上的callActivityOnCreate(Instrumentation.java:1214)。应用程序。ActivityThread。在android上执行LaunchActivity(ActivityThread.java:2731)。应用程序。ActivityThread。handleLaunchActivity(ActivityThread.java:2856)

共有2个答案

洪富
2023-03-14

这与Firebase身份验证无关。您只是没有给signIn赋值,当您对其调用setOnClickListener()时,它会抛出NullPointerException。在对其调用方法之前,为其指定一个非null值。

佴保臣
2023-03-14

您忘记在以下行之前初始化登录按钮:

signIn.setOnClickListener(this);

因此,按钮总是有一个空值,这就是导致应用程序崩溃的原因。

添加signIn=findViewById(R.id.yourbutonid) 在上面的行将解决您的问题之前。我认为您的其余代码没有问题。

我希望这有帮助。。快乐的编码!

 类似资料:
  • 我的应用/构建。格雷德尔: 在调试模式下,我成功地完成了auth。由Firebase授权。 输入电话号码 好的。工作正常。 但当我想在发布模式下执行此操作时,我会遇到下一个错误:

  • Flutter Android Firebase认证错误,虽然应用程序没有失败,但认证通过了,但终端出错 [错误:flatter/lib/ui/ui\u dart\u state.cc(148)]未处理的异常:NoSuchMethodError:对null调用了getter“uid”。 错误似乎来自这一行代码

  • 我试图在Android Studio中建立一个OTP系统,我想出了下面给出的代码,然而,每次我尝试将OTP发送到我的电话号码时,应用程序都崩溃了。代码如下: Signp3RDClass.java

  • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

  • 我一直很难找到Google Firebase身份验证背后的SLA。根据托管和实时数据库的服务水平协议,Firebase的每月正常运行时间百分比应至少达到99.95%。它是否适用于身份验证服务?

  • 我有一个使用Kafka Streams API的应用程序。我在当地工作时没有问题。我想连接到远程Kafka代理进行阶段测试。远程Kafka代理设置为使用GSSAPI sasl机制并使用Kerberos。我运行用java编写的Streams应用程序时出错。在我查找错误消息后,我找到了答案,但仍然有问题。 错误消息;获取相关id为3的元数据时出错:{[APPID]-KTABLE-AGGREGATE-S