-1

firebase 인증을 사용하고 Uid를 가져와 firebase 데이터베이스의 사용자에 관한 다른 정보로 저장하려고합니다.Firebase 인증 및 데이터베이스

SignUpActivity 및 LoginActivity를 사용하고 있습니다. firebase 인증 (전자 메일, pwd)을 사용하여 내 응용 프로그램에 등록한 후 로그인해도 괜찮습니다.하지만 firstName, lastName 등과 같은 사용자에 대한 정보를 추가 할 때, PHONENUMBER, 난, AUTHUSER

SignUpActivity에서 ButtonSignUp ERR "NullPointerException이"이 :

enter image description here

:이 로그 캣과 디버거입니다

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); 

    } 

답변

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

을 나는 유 말해하지만 난 여전히 같은 ERR이 무엇인지, 난 그냥 추가 않았다 위의 logcat. – Amal

+0

온라인 121은 무엇입니까? –

+0

있습니다 : authUser.createUserWithEmailAndPassword (전자 메일, 암호) – Amal