2017-08-12 223 views
0

顯示java.lang.NullPointerException:上一個空對象引用嘗試調用虛擬方法「java.lang.String中com.google.firebase.auth.FirebaseUser.getUid()」錯誤註冊和登錄

public class RegisterActivity extends AppCompatActivity { 
    private EditText email,name,password; 
    DatabaseReference databaseReference; 
    FirebaseAuth mAuth; 
    private DatabaseReference userIdRef; 
    ProgressDialog registerDialog; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mAuth=FirebaseAuth.getInstance(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     email=(EditText)findViewById(R.id.email); 
     name=(EditText)findViewById(R.id.name); 
     password=(EditText)findViewById(R.id.password); 
     databaseReference= FirebaseDatabase.getInstance().getReference().child("chat_users"); 
     // mAuth=FirebaseAuth.getInstance(); 
     registerDialog=new ProgressDialog(this); 
     registerDialog.setMessage("Registering.."); 
    } 
    public void submit(View view) { 
     registerDialog.show(); 
     mAuth.createUserWithEmailAndPassword(email.getText().toString(),password.getText().toString()).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       if(task.isComplete()) 
       { 
        registerDialog.dismiss(); 
        Toast.makeText(getApplicationContext(),"Registered successfully",Toast.LENGTH_SHORT).show(); 
        userIdRef=databaseReference.child(mAuth.getCurrentUser().getUid().toString()); 
        userIdRef.child("name").setValue(name.getText().toString()); 
        finish(); 
       } 
       registerDialog.dismiss(); 
      } 
     }); 
    } 
} 
+0

userIdRef = databaseReference.child(mAuth.getCurrentUser()。getUid()。toString());這裏顯示錯誤 –

回答

0

註冊過程中可能存在錯誤,某些示例是因爲密碼的長度不夠長,並且尚未在Firebase控制檯中啓用Password身份驗證。

您可以通過修改onComplete方法實現,因爲使用的是在你的代碼a null object reference捕捉錯誤

mAuth.createUserWithEmailAndPassword(email.getText().toString(),password.getText().toString()).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
    @Override 
    public void onComplete(@NonNull Task<AuthResult> task) { 
     if (task.isSuccessful()) { 
      // Register success 
      Toast.makeText(getApplicationContext(), "Registered successfully", Toast.LENGTH_SHORT).show(); 

      userIdRef = databaseReference.child(mAuth.getCurrentUser().getUid()); 
      userIdRef.child("name").setValue(name.getText().toString()); 
      finish(); 
     } else { 
      // If register fails 
      Toast.makeText(getApplicationContext(), "Registration Error: " + task.getException(),Toast.LENGTH_SHORT).show(); 
     } 
     registerDialog.dismiss(); 
    } 
}); 

希望這有助於:)

0

你得到NullPointerException。所以爲了解決這個問題,我建議你使用下面的代碼,在其中你可以正確實例化,檢查無效並使用firebaseUser對象。

FirebaseAuth auth = FirebaseAuth.getInstance(); 
FirebaseAuth.AuthStateListener authListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); 
     if (firebaseUser != null) { 
      String uid = firebaseUser.getUid(); 
      //Do what you want with it 
     } 
    } 
}; 

希望它有幫助。