Firebase вход и регистрация с именем пользователя

Я в настоящее время использую AndroidHive'sруководство чтобы научиться использовать Firebase, я начинаю хорошо понимать методы и документацию - я понял, что Firebase предлагает метод регистрации / входа с электронной почтой и паролем, и что эта часть информации не хранится в нашей базе данных.

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

auth.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()) {
        Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
            Toast.LENGTH_SHORT).show();
    } else {
        startActivity(new Intent(SignupActivity.this, MainActivity.class));
        finish();
    }
}
});

Любая помощь высоко ценится спасибо

Ответы на вопрос(2)

.getDatabase(); первый. Это не родной метод Firebase, моя ошибка.

У меня твоя проблема.

Сделайте FirebaseDatabase глобальной переменной и инициализируйте ее в onCreate. Это требует контекста в точке.

Просто возьмиFirebaseDatabase database; прежде чем создавать.

И В, наСоздать: инициализировать,database=FirebaseDatabase.getInstance();.

Не инициализируйте в методе. Я скоро отредактирую свой предыдущий ответ.

 Tanishq Sharma18 июл. 2016 г., 03:00
Хахах, какая глупая ошибка. этоusers.push().setValue(); Так как это метод.От себя важно, он генерирует ключи на основе времени.
 TerribleCoder18 июл. 2016 г., 00:04
Хорошо, если я использую setValue без push, это работает, но мне нужны учетные записи пользователей, чтобы они не удалялись, как только кто-то зарегистрировался. Ошибка здесьdrive.google.com/file/d/0B4vL9wnJulKoU09iSXFoWjFwaVU/..., Я также установил ссылку на БД в OnCreaate вверху
Решение Вопроса

Попробуй это:

auth.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);
    generateUser(email, password)

    if (!task.isSuccessful()) {
        Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
            Toast.LENGTH_SHORT).show();
    } else {
        startActivity(new Intent(SignupActivity.this, MainActivity.class));
        finish();
    }
}
});

Это метод, который вызывается выше.

public void generateUser(String username, String password)
{

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference users = database.getReference("users"); //users is a node in your Firebase Database.
User user = new User(username, password); //ObjectClass for Users
users.push().setValue(user);

}

Также:User.class

   public class User {

    String username;
    String password;

    public User() {
    //Empty Constructor For Firebase
    }


public User(String username, String password)
        {
        this.username = username; //Parameterized for Program-Inhouse objects.
        this.password = password;
        }

    //Getters and Setters
    public String getUsername()
    {
    return username;
    }
    public void setUsername(String username)
    {
    this.username = username;
    }
    public String getPassword()
    {
    return password;
    }
    public void setPassword(String password)
    {
    this.password = password;
    }
}
 Tanishq Sharma17 июл. 2016 г., 20:46
В чем именно ошибка?
 Tanishq Sharma17 июл. 2016 г., 21:05
@TerribleCoder Пожалуйста, сделайте это исправление:FirebaseDatabase database = FirebaseDatabase.getInstance().getDatabase();
 Tanishq Sharma17 июл. 2016 г., 19:42
Также я бы порекомендовал вам «зашифровать» пароль перед отправкой в ​​базу данных. Я бы порекомендовал вам их мягко зашифровать. Может быть, попробуйте это:140Encryptor
 TerribleCoder17 июл. 2016 г., 19:31
ах это сработало спасибо, я не был полностью уверен в структуре, но это прояснило
 TerribleCoder17 июл. 2016 г., 21:46
На самом деле это не работает, push имеет ту же ошибкуdrive.google.com/file/d/0B4vL9wnJulKoaEh6bDJyTUk0cVU/...
 Tanishq Sharma17 июл. 2016 г., 22:48
У меня твоя проблема. Сделайте FirebaseDatabase глобальной переменной и инициализируйте ее в onCreate. Это требует контекста в точке. Просто возьмиFirebaseDatabase database; прежде чем создавать. И В, наСоздать: инициализировать,database=FirebaseDatabase.getInstance();, Не инициализируйте в методе. Я скоро отредактирую свой ответ.
 Tanishq Sharma17 июл. 2016 г., 19:51
Да, вы можете иметь как пустой, так и параметризованный конструктор. Пустой конструктор важен и необходим при чтении данных из Firebase. ПроверьтеИзвлечение данных раздел в Firebase Docs. Извините за одну маленькую ошибку, здесь мы должны поставить оба. Редактирование вышеуказанного ответа.
 Tanishq Sharma17 июл. 2016 г., 22:57
@TerribleCoder проверьте мой новый ответ ниже
 Tanishq Sharma17 июл. 2016 г., 19:54
@TerribleCoder Проверьте отредактированный код. :)
 TerribleCoder17 июл. 2016 г., 19:57
Кажется, у меня все еще есть ошибка с push, есть идеи, почему?
 TerribleCoder17 июл. 2016 г., 19:49
Спасибо, Да, я уже создал метод шифрования в своем классе, но я получаю ошибку с вашим кодом,drive.google.com/file/d/0B4vL9wnJulKoN3gxajFBUUhUX1E/... Вы уверены, что конструктор пользователя должен быть пустым? Извините, я просто думаю о чистой Java, я новичок в Firebase, также есть ошибка с Push Aswell не могу разрешить тип, я импортировал базу данных и добавил ее для сборки Gradle

Ваш ответ на вопрос