2017-08-12 224 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 
     } 
    } 
}; 

希望它有帮助。