Android Studio: загрузка пользовательских данных после проверки электронной почты с использованием firebase - PullRequest
1 голос
/ 29 мая 2019

Я хочу загрузить некоторую информацию о пользователях через библиотеки Firebase в Android Studio.У меня проблема в том, что я не уверен, как склеить функции, чтобы они работали.

Пока у меня есть функция проверки электронной почты, а также функция загрузки пользовательских данных, но когда я нажимаю кнопку регистрации, подтверждение по электронной почте отправлено, и оно работает (пользователь зарегистрирован, но пользовательские данные не загружены в базу данных firebase.

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

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.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class RegisterActivity extends AppCompatActivity {

    private EditText userName, userPassword, userEmail, phoneNumber;
    private Button logButton, regButton;
    private FirebaseAuth firebaseAuth;
    String email, name, phone, password;

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

        firebaseAuth = FirebaseAuth.getInstance();

        regButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(validate()){
                    //upload everithing to the database
                    String user_name = userName.getText().toString().trim();
                    String user_email = userEmail.getText().toString().trim();
                    String user_password = userPassword.getText().toString().trim();
                    String user_phone = phoneNumber.getText().toString().trim();

                    firebaseAuth.createUserWithEmailAndPassword(userEmail.getText().toString().trim(), userPassword.getText().toString().trim()).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if(task.isSuccessful()) {
                               sendEmailVerification();
                            }
                            else{
                                Toast.makeText(RegisterActivity.this, "Registration failed", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });

                }
            }
        });
        logButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(RegisterActivity.this, MainActivity.class));
            }
        });
    }

    private void setupUIViews(){
        userName = (EditText)findViewById(R.id.etUser2);
        userPassword = (EditText)findViewById(R.id.etPas2);
        userEmail = (EditText)findViewById(R.id.etEmail2);
        phoneNumber = (EditText)findViewById(R.id.etPhone1);
        regButton = (Button)findViewById(R.id.registerButton2);
        logButton = (Button)findViewById(R.id.loginButton2);

    }

    private Boolean validate(){
        Boolean result = false;

         name = userName.getText().toString().trim();
         email = userEmail.getText().toString().trim();
         phone = phoneNumber.getText().toString().trim();
         password = userPassword.getText().toString().trim();

        if(name.isEmpty() || password.isEmpty() || email.isEmpty()){
           Toast.makeText(this, "Please enter all the details", Toast.LENGTH_SHORT).show();
        }
        else{
            result = true;
        }
        return result;
    }

    private void sendEmailVerification(){
        final FirebaseUser firebaseUser = firebaseAuth.getInstance().getCurrentUser();

        if(firebaseUser != null){
            firebaseUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        sendUserData();
                        Toast.makeText(RegisterActivity.this, "Sucessfully registered", Toast.LENGTH_SHORT).show();
                        firebaseAuth.signOut();
                        finish();
                        startActivity(new Intent(RegisterActivity.this, MainActivity.class));
                    }
                    else{
                        Toast.makeText(RegisterActivity.this, "Verification email was not sent", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }

    private void sendUserData(){
        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
        DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid());
        UserProfile userProfile = new UserProfile(name, email, phone);
        myRef.child(firebaseAuth.getUid()).setValue(userProfile);
    }
}

, а также класс UserProfile:

package com.example.myapplication;

public class UserProfile {
    public String userName;
    public String userEmail;
    public String userPhone;

    public UserProfile(String userName, String userEmail, String userPhone) {
        this.userName = userName;
        this.userEmail = userEmail;
        this.userPhone = userPhone;
    }
}

Итак, в заключение я хочу добавить данные пользователя в базу данных, а также проверить электронную почту. Заранее спасибо!

1 Ответ

1 голос
/ 29 мая 2019

Добавьте прослушиватель для метода setValue () и вызов signOut () при успешной записи данных.

private void sendUserData(){
    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference myRef = firebaseDatabase.getReference(firebaseAuth.getUid());
    UserProfile userProfile = new UserProfile(name, email, phone);
    myRef.child(firebaseAuth.getUid()).setValue(userProfile).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            firebaseAuth.signOut();
        }
    });
}

Надеюсь, это решит проблему.Кстати, ваш код, кажется, имеет много дубликатов, таких как многократное чтение входных данных из текстовых представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...