2017-02-20 131 views
-1

我想要使用Firebase身份验证并获取Uid并在Firebase数据库中存储有关用户的其他信息。Firebase身份验证和数据库

我有SignUpActivity和LoginActivity,我使用的是Firebase身份验证(电子邮件,pwd)注册并登录我的应用程序,这很好,但是当我添加更多关于用户的信息时,比如firstName,lastName, phoneNumber的,我有一个ERR “的NullPointerException” 在AUTHUSER

SignUpActivity,ButtonSignUp:

btnSignUp.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       final String nom =inputNom.getText().toString().trim(); 
       final String prenom=inputPrenom.getText().toString().trim(); 
       final String numTel= inputNumTel.getText().toString().trim(); 
       String email = inputEmail.getText().toString().trim(); 
       String password = inputPassword.getText().toString().trim(); 
       //create user 
       authUser.createUserWithEmailAndPassword(email, password) 
         .addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() { 
          @Override 
          public void onComplete(@NonNull Task<AuthResult> task) { 
           Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); 
           progressBar.setVisibility(View.GONE); 
           if (!task.isSuccessful()) { 
            createUser(nom,prenom,numTel); 
            Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(), 
              Toast.LENGTH_SHORT).show(); 
           } else { 
            startActivity(new Intent(SignupActivity.this, LoginActivity.class)); 
            finish(); 
           } 
          } 
         }); 

      } 
     }); 


      private void createUser(String nom, String prenom,String numTel) { 

     //Get Firebase auth instance 
     authUser = FirebaseAuth.getInstance(); 
     user = authUser.getCurrentUser(); 

     if (user != null) { 
      id=user.getUid(); 
     } 
     userInfos = new User(nom, prenom, numTel); 
     myRef.child(id).setValue(userInfos); 

    } 

这是logcat的和调试器:

enter image description here

回答

1

尝试在createUser方法中为Firebase的实例使用不同的名称,我建议在方法中声明一个局部变量。

其次,if语句下面将始终评估为“假”,如果用户注册成功并真正报名时,以任何理由,失败了,所以去掉“!”:

if (!task.isSuccessful()) 
{ 
    createUser(nom,prenom,numTel); 
    Toast.makeText(SignupActivity.this, "Authentication failed." + 
    task.getException(), 
    Toast.LENGTH_SHORT).show(); 

} 

帖子你的错误日志也可以帮助你更好地理解错误。希望这可以帮助。

-------代码段下面,根据需要修改.-------

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.TextUtils; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.AuthResult; 
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 

public class RegisterActivity extends AppCompatActivity { 

    private FirebaseAuth fbAuth; 
    private EditText userNameField; 
    private EditText passwordField; 
    private EditText emailField; 
    private Button registrationButton; 
    private ProgressDialog progressDialog; 
    private DatabaseReference databaseReference; 

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

     //initialize all variables/objects 
     fbAuth = FirebaseAuth.getInstance(); 
     progressDialog = new ProgressDialog(this); 
     databaseReference = FirebaseDatabase.getInstance().getReference().child("Users"); 
     userNameField = (EditText)findViewById(R.id.nameField); 
     passwordField = (EditText)findViewById(R.id.passwordField); 
     emailField = (EditText)findViewById(R.id.emailField); 


     registrationButton = (Button)findViewById(R.id.registerButton); 

     registrationButton.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
      startUserRegistration(); 
      } 
     }); 

    } 

    private void startUserRegistration() { 
     //initialize all variables/objects 
     FirebaseAuth fbAuth = FirebaseAuth.getInstance(); 
     final String name = userNameField.getText().toString().trim(); 
     String email = emailField.getText().toString().trim(); 
     String password = passwordField.getText().toString().trim(); 

     if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password)) 
     { 



      fbAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 


        if(task.isSuccessful()) 
        { 
         //your logic is below, initialize the user object 
        user = authUser.getCurrentUser(); 

     if (user != null) { 


     String userid = fbAuth.getCurrentUser().getUid(); 
     userInfos = new User(nom, prenom, numTel); 
     myRef.child(id).setValue(userInfos); 

      } 

        } 
       } 
      }); 
     } 
    } 
} 
+0

我没有什么ü告诉我,但我仍然有同样的错了,我只是添加上面的logcat。 – Amal

+0

121线是什么? –

+0

有:authUser.createUserWithEmailAndPassword(电子邮件,密码) – Amal