2016-07-17 5 views
1

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

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

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

Любая помощь очень ценится благодаря

ответ

1

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

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; 
    } 
} 
+0

ах это сработало спасибо, я не был полностью уверен в структуре, но это очистило вещи – TerribleCoder

+0

Кроме того, я бы порекомендовал вам «зашифровать» пароль перед отправкой его в базу данных. Я бы рекомендовал вам их зашифровать. Возможно, попробуйте это: [140Encryptor] (https://github.com/tanishqsh/140Encryptor/blob/master/README.md) –

+0

Спасибо, да, я уже создал метод шифрования в своем классе, я получаю сообщение об ошибке с ваш код, однако, https://drive.google.com/file/d/0B4vL9wnJulKoN3gxajFBUUhUX1E/view?usp=sharing, вы уверены, что конструктор User должен быть пустым? Извините, я просто думаю о чистой java, я новичок в firebase, также есть ошибка с типом push aswell can not, я импортировал базу данных и добавил ее, чтобы построить gradle – TerribleCoder

0

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

У меня возникла ваша проблема.

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

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

И In, onCreate: initialise, database=FirebaseDatabase.getInstance();.

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

+0

Хорошо, если я использую setValue без нажатия, это работает, но мне нужно, чтобы учетные записи пользователей не удалялись, как только кто-то еще регистрируется. Ошибка здесь https://drive.google.com/file/d/0B4vL9wnJulKoU09iSXFoWjFwaVU/view?usp=sharing. Я также установил ссылку базы данных в OnCreaate наверху – TerribleCoder

+0

Хаха, какая хромая ошибка. Его 'users.push(). SetValue();' С его метода. ** push ** имеет важное значение, он генерирует временные ключи. –

Смежные вопросы