【问题标题】:App crashes (Firebase authentication related)应用程序崩溃(与 Firebase 身份验证相关)
【发布时间】:2018-06-23 00:22:22
【问题描述】:

这是代码 -

    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.example.kinnari.trial2 D/FA:记录事件 (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, 参与时间_毫秒(_et)=2716, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=-7572526684473257642}] 01-13 17:07:13.734 5027-5027/com.example.kinnari.trial2 D/AndroidRuntime:正在关闭 虚拟机 01-13 17:07:13.737 5027-5027/com.example.kinnari.trial2 E/AndroidRuntime: 致命异常: main 进程:com.example.kinnari.trial2,PID:5027 java.lang.RuntimeException:无法启动活动 组件信息{com.example.kinnari.trial2/com.example.kinnari.trial2.login}: java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' 在空对象引用上 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 在 android.app.ActivityThread.-wrap11(未知来源:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 引起:java.lang.NullPointerException:尝试调用虚拟 方法'无效 android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' 在空对象引用上 在 com.example.kinnari.trial2.login.onCreate(login.java:46) 在 android.app.Activity.performCreate(Activity.java:6999) 在 android.app.Activity.performCreate(Activity.java:6990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 在 android.app.ActivityThread.-wrap11(未知来源:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 01-13 17:07:13.851 5027-5047/com.example.kinnari.trial2 I/zygote:背景 并发复制 GC 释放 6839(912KB) AllocSpace 对象,3(124KB) LOS 对象,50% 空闲,1707KB/3MB,暂停 6.740ms 总共 111.655ms 01-13 17:24:04.987 5027-5054/com.example.kinnari.trial2 W/DynamiteModule:本地模块描述符类 com.google.firebase.auth 未找到。

【问题讨论】:

    标签: java android firebase authentication


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您忘记在该行之前初始化 signIn 按钮:

      signIn.setOnClickListener(this);
      

      因此,按钮始终为空值,这就是导致您的应用崩溃的原因。

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

      我希望这会有所帮助.. 编码愉快!

      【讨论】:

        猜你喜欢
        • 2019-12-20
        • 2018-08-20
        • 1970-01-01
        • 2021-10-03
        • 2018-10-21
        • 1970-01-01
        • 2022-11-24
        • 2018-05-05
        • 2023-02-04
        相关资源
        最近更新 更多