Comment stocker les données en temps réel de la base de données dans firebase pendant l'enregistrement d'utilisateur?
Je suis en train de faire socialmedia-comme l'app qui a le profil de l'utilisateur. Je veux sauvegarder leurs données de profil au moment de leur inscription à l'aide de son uid. Bien que l'inscription est réussie, le profil n'est pas de l'épargne dans le firebase base de données. J'ai également vérifié les règles, de lire et d'écrire est défini pour les utilisateurs authentifiés.
Voici mon code:
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_reg;
private EditText etName, etEmail, etPassword, etCPassword, etMobile, etSchoolCompany, etLocation;
private ProgressDialog progressDialog;
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Firebase.setAndroidContext(this);
firebaseAuth = FirebaseAuth.getInstance();
progressDialog = new ProgressDialog(this);
btn_reg = (Button)findViewById(R.id.btnRegister);
etName = (EditText)findViewById(R.id.etName);
etEmail = (EditText)findViewById(R.id.etEmail);
etPassword = (EditText)findViewById(R.id.etPassword);
etCPassword = (EditText)findViewById(R.id.etCPassword);
etMobile = (EditText)findViewById(R.id.etMobile);
etSchoolCompany = (EditText)findViewById(R.id.etSchoolCompany);
etLocation = (EditText)findViewById(R.id.etLocation);
btn_reg.setOnClickListener(this);
}
@Override
public void onClick (View view){
if(view == btn_reg){
registerUser();
}
}
private void registerUser(){
String name = etName.getText().toString();
String mobile = etMobile.getText().toString();
String SchoolCompany = etSchoolCompany.getText().toString();
String location = etLocation.getText().toString();
final String email = etEmail.getText().toString().trim();
final String password = etPassword.getText().toString().trim();
String cpassword = etCPassword.getText().toString().trim();
progressDialog.setMessage("Registering..");
progressDialog.show();
//REGISTERING USER
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
//THIS IS FOR STORING AUTHENTICATED USER'S DATA
final Firebase ref = new Firebase("https://myfirebase.firebaseio.com");
ref.authWithPassword(email, password, new Firebase.AuthResultHandler(){
@Override
public void onAuthenticated(AuthData authData){
//Authentication just completed successfully :)
Map<String, String> map = new HashMap<String, String>();
map.put("provider", authData.getProvider());
if(authData.getProviderData().containsKey("displayName")) {
map.put("displayName", authData.getProviderData().get("displayName").toString());
}
ref.child("users").child(authData.getUid()).setValue(map);
}
@Override
public void onAuthenticationError(FirebaseError error) {
//ERRORS TODO
}
});
progressDialog.hide();
Toast.makeText(RegisterActivity.this, "Registered Successfully", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(RegisterActivity.this, "Registration failed, please try again", Toast.LENGTH_SHORT).show();
}
}
});
}
}
vous pouvez regarder le logcat, vérifiez si il y a
Nope, je ne vois pas l'autorisation refusée sur logcat.. Cependant, j'ai vu ce
permission denied
avertissement après cette ligne ref.child("users").child(authData.getUid()).setValue(map);
Nope, je ne vois pas l'autorisation refusée sur logcat.. Cependant, j'ai vu ce
D/FirebaseApp: Notified 0 auth state listeners.
pourrait vous donner un indice peut-être?
OriginalL'auteur Gian7 | 2016-07-30
Vous devez vous connecter pour publier un commentaire.
De la createUserWithEmailAndPassword méthode de référence
Cela signifie que vous n'avez pas besoin d'authentifier l'utilisateur à nouveau après le processus d'inscription terminé.
Pour s'assurer que la tâche est terminée et la
firebaseUser
n'est pas nul, mieux ajouterAuthStateListener
à votreFirebaseAuth
au lieu de l'enregistrement des données à l'intérieur deonComplete
méthode, le code est dans le guide officielEnsuite, vous pouvez enregistrer les données si l'utilisateur est authentifié.
ouais d'accord, POJO est mieux. C'est juste plus facile de donner l'exemple dans la Carte. Cheers 🙂
je m pénétrer à l'intérieur du bloc de la tâche.isSuccessfull ----> faux, mais encore sa vocation onAuthStateChanged méthode
votre solution m'aide pas, il manque un peu de clés et de valeurs, et je ne suis pas en mesure de résoudre
OriginalL'auteur Wilik
Suppose que si vous voulez ajouter le nom d'utilisateur de base de données, puis écrire
puis il suffit de créer un objet de
DatabaseReference
classe par exemple:De la même manière, vous pouvez le faire pour le reste des choses
Cela permettra de stocker les données en JSON arbre dont la racine est
myRootRef
et son enfant serauserNameRef
Je pense que vous devez vous authentifier, voir mon code ci-dessus.. en dessous de la ligne de
//THIS IS FOR STORING AUTHENTICATED USER'S DATA
.. je pense que c'est la façon dont vous vérifier si votre email est déjà enregistré. Ou si vous êtes à la gestion d'erreur si l'email est déjà enregistré, veuillez vérifier Erreur Complet d'Inscriptionbon, je vous remercie
Je l'ai essayé
private void reguser(){ String email = etEmail.getText().toString().trim(); myRootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference RootUsers = myRootRef.child("users"); RootUsers.setValue(email); }
mais j'obtiens une erreur " java.lang.NoClassDefFoundError: Échec de la résolution: l'icom/google/firebase/base de données/FirebaseDatabase;` sur la ligne de myRootRefêtes-vous sûr que si firebase base de données est correctement synchronisé dans votre projet?
OriginalL'auteur Amit Upadhyay
Pour toute autre personne ayant un problème similaire, une cause fréquente de données ne sont pas persisté dans Firebase est le nom de l'enfant dans
Realtime Database|Rules
ne correspondant pas le nom dans votre code java:De code Java:
Vous devriez appeler:
ref.child("users").child(firebaseUser.getUid()).setValue(<YOUR_POJO_OBJECT>);
au lieu de
OriginalL'auteur ojonugwa ochalifu