Регистрационная форма не записывается в базу данных - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь сделать регистрационную форму и хочу сохранить данные, введенные пользователем, но когда я запускаю приложение и проверяю свою базу данных в Firebase, ничего не происходит, я уже убедился, что моя база данных подключена к этому приложение, но все равно я ничего не получаю, вот что у меня так далеко:

package com.example.parkingapp;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

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 static final String TAG = "RegisterPage";

    private EditText fName, lName, userEmail, userPassword, pNumber,schoolName;
    private Button registerBtn;
    private FirebaseAuth firebaseAuth;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myReference = database.getReference("https://authenticate-user-443f2.firebaseio.com/");

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

        fName = (EditText) findViewById(R.id.first_name);
        lName = (EditText) findViewById(R.id.last_name);
        userEmail = (EditText) findViewById(R.id.email_address);
        userPassword = (EditText) findViewById(R.id.password);
        pNumber = (EditText) findViewById(R.id.phone_number);
        schoolName = (EditText) findViewById(R.id.school_name);
        registerBtn = (Button) findViewById(R.id.register_user);

        firebaseAuth = FirebaseAuth.getInstance();

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

        registerBtn.setOnClickListener((View.OnClickListener) this);
    }

       // registerBtn.setOnClickListener(new View.OnClickListener() {
         //   @Override
           // public void onClick(View v) {
             //   RegisterActivity.this.finish();
            //}
        //});

        //registerBtn.setOnClickListener(new View.OnClickListener() {
          //  @Override
            //public void onClick(View v) {
              //  RegisterActivity.this.registerUser();
            //}
        //});

    //}


    public void onClick(View view){
        if(view == registerBtn) {
            registerUser();
        }
    }

    private void registerUser() {
        final String firstName = fName.getText().toString();
        final String lastName = lName.getText().toString();
       final String email = userEmail.getText().toString();
        final String password = userPassword.getText().toString();
        final String phoneNumber = pNumber.getText().toString();
        final String school = schoolName.getText().toString();


        if (TextUtils.isEmpty(email)) {
            showToast("Enter email address!");
            return;
        }

        if(TextUtils.isEmpty(password)){
            showToast("Enter Password!");
            return;
        }

        if(userPassword.length() < 6){
            showToast("Password too short, enter minimum 6 characters");
            return;
        }


        //register user
        firebaseAuth.createUserWithEmailAndPassword(email,password)
                .addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d(TAG, "New user registration: " + task.isSuccessful());

                        if (task.isSuccessful()) {
                           // RegisterActivity.this.showToast("Authentication failed. " + task.getException());
                            DatabaseReference ref = database.getReference("https://authenticate-user-443f2.firebaseio.com/");
                            DatabaseReference firstN =  ref.child("first name");
                            firstN.setValue(firstName);
                            DatabaseReference lastN =  ref.child("last name");
                            lastN.setValue(lastName);
                            DatabaseReference emailAddress =  ref.child("email");
                            emailAddress.setValue(email);
                            DatabaseReference password =  ref.child("password");
                            password.setValue(password);
                            DatabaseReference phone =  ref.child("phone number");
                            phone.setValue(phoneNumber);
                            DatabaseReference schoolName =  ref.child("school");
                            schoolName.setValue(school);


                        } else {
                            RegisterActivity.this.startActivity(new Intent(RegisterActivity.this, DestinationActivity.class));
                            RegisterActivity.this.finish();
                        }
                    }
                });
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    public void showToast(String toastText) {
        Toast.makeText(this, toastText, Toast.LENGTH_SHORT).show();
    }

}

Любая помощь приветствуется!

Вот журнал cat: enter image description here

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Если вы хотите сохранить данные из вашей формы в базе данных Firebase, рекомендуем сделать что-то похожее на это:

Вы пытаетесь сохранить данные из формы регистра, чтобы структура данных была такой же каждый раз. Создайте новый объект с полями, которые вы хотите сохранить в базе данных (пример с 2 полями приведен ниже):

 public class User {
    private String username;
    private String email;

    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}

Поскольку ваше приложение связано с базой данных, вам не нужно указывать URL. Вы можете просто использовать выражение:

private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference().child("users").child("user_id");

После этого соедините поля из макета с переменными:

Button registerBtn = (Button) findViewById(R.id.register_button);
EditText userName = (EditText) findViewById(R.id.name);
EditText userEmail = (EditText) findViewById(R.id.mail);

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

registerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = userName.getText().toString();
                String mail = userEmail.getText().toString();
                pushNewUser(name, mail);
            }
        });

Последний шаг - установка значений в базу данных.

private void pushNewUser(String name, String email){
        User newUser = new User(name, email);
        mDatabase.setValue(newUser);
    }

Чтобы добавить больше полей, вы должны добавить их в User. java (не забывайте о costructor / getters / setters) и затем передать больше значений в функцию pushNewUser.

0 голосов
/ 24 апреля 2020

Вы должны использовать getReferenceUrl:

Получает DatabaseReference для предоставленного URL.

DatabaseReference ref = database.getReferenceUrl("https://authenticate-user-443f2.firebaseio.com/");

или

Получает DatabaseReference для базы данных root узел.

DatabaseReference ref = database.getReference();

Тогда для какого пользователя вы хотите установить значение? (Неизвестно) Вам необходимо установить идентификатор пользователя (уникальный идентификатор).

ref.child("users").child("user_id").child("first name").setValue(firstName);

Я думаю, вы должны создать объект пользователя. Это было бы более полезно для вас.

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