2017-09-15 51 views
-1

我在我的android项目中使用了firebase。 但是,当用户尝试使用我的应用程序注册Firebase时,会出现这种情况。登录到kotlin的firebase android studio

我的错误日志

09-15 13:54:23.992 2716-2716/com.example.err0r1096.tikteck E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.err0r1096.tikteck, PID: 2716 

java.lang.IllegalStateException: Could not execute method for android:onClick 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
    at android.view.View.performClick(View.java:5637) 
    at android.view.View$PerformClick.run(View.java:22429) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
    Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    at android.view.View.performClick(View.java:5637)  
    at android.view.View$PerformClick.run(View.java:22429)  
    at android.os.Handler.handleCallback(Handler.java:751)  
    at android.os.Handler.dispatchMessage(Handler.java:95)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6119)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  
    Caused by: kotlin.KotlinNullPointerException 
    at com.example.err0r1096.tikteck.Login.LoginToFireBase(Login.kt:26) 
    at com.example.err0r1096.tikteck.Login.OneC(Login.kt:20) 
    at java.lang.reflect.Method.invoke(Native Method)  
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
    at android.view.View.performClick(View.java:5637)  
    at android.view.View$PerformClick.run(View.java:22429)  
    at android.os.Handler.handleCallback(Handler.java:751)  
    at android.os.Handler.dispatchMessage(Handler.java:95)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6119)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)  

,这我的代码:

package com.example.err0r1096.tikteck 

import android.support.v7.app.AppCompatActivity 
import android.os.Bundle 
import android.view.View 
import android.widget.Toast 
import com.google.firebase.auth.FirebaseAuth 
import kotlinx.android.synthetic.main.activity_login.* 


class Login : AppCompatActivity() { 

    private val mAuth: FirebaseAuth? = null 
    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_login) 
    } 
    fun OneC(view: View){ 

     LoginToFireBase(etEmail.text.toString(),etPassword.text.toString()) 

    } 

    fun LoginToFireBase(email:String,password:String){ 

     mAuth!!.createUserWithEmailAndPassword(email,password) 
       .addOnCompleteListener(this){ task -> 

        if (task.isSuccessful){ 
         Toast.makeText(applicationContext,"Successful login",Toast.LENGTH_LONG).show() 
} 
       else 
       { 
        Toast.makeText(this,"Login UnSuccessful",Toast.LENGTH_LONG).show() 
       } 
     } 
    } 
} 

我的应用程序崩溃的启动按钮时,用户点击。

我认为问题出在我的代码中,而不是在firebase上。

+1

你的代码在'LoginToFireBase(登录扔'NullPointerException'。 KT:26)'。你有没有在任何地方初始化'mAuth'?如果没有,['mAuth !!'会抛出'NullPointerException'](https://stackoverflow.com/questions/34342413/what-is-the-kotlin-double-bang)。 –

+0

“mAuth !!” - 尽量不要使用它,如果你不是100%肯定它不是null。尽可能避免可空对象。这将导致更清洁和无崩溃的代码。 –

回答

0

您可以检查official doc:

科特林的类型系统的目的是从我们的代码消除Nu​​llPointerException异常的。 NPE的唯一可能原因可能是:

  • 显式调用抛出NullPointerException();

  • 使用!!如下所述的操作符;

  • 外部Java代码导致了它;

  • 初始化方面存在一些数据不一致性(未初始化的可用于某个构造函数中)。

使用:b!!它将返回的b一个non-null值或抛出一个NPE如果bnull

检查你的代码(您使用的科特林如Java)

mAuth!!.createUserWithEmailAndPassword(email,password) 

你是否在任何地方初始化mAuth?如果没有,mAuth!!将抛出一个NullPointerException

+0

我无法理解你! –

0

尝试通过声明的窗口小部件,

fun onC (view: View) { 
val emailTxt = findViewById<View>(R.id.etEmail) as EditText 
val passwordTxt = findViewById<View>(R.id.etPassword) as EditText 
val email = emailTxt.text.toString.trim() 
val password = passwordTxt.text.toString.trim() 
LoginToFireBase (email, password) 
} 

这可能会解决您的问题:)