2017-02-20 175 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