我有一个应用,其中用户有2个选项,登录和注册。 在登录选项中,用户输入他的firebase用户名和密码,然后成功转到MainActivity。
在注册选项中,用户同时看到4个屏幕,其中要求他/她输入关于他们自己的一些数据。在最后一个屏幕中,系统会要求用户输入firebase注册的电子邮件/用户名,但由于某种原因,在将数据输入firebase DB时会出错。而最令人讨厌的是android studio甚至没有向我显示错误。
无论如何,代码如下。我已将其标记为评论,"我认为这里出现了主要问题。"作为我的代码中的评论。流程是这样的,它来自RegScreen1 - > RegScreen2 - > RegScreen3 - > RegScreen4 - >主要活动。但是,出于某种原因,在RegScreen4之后 - > RegScreen3出现。
Bundle b = getIntent().getExtras();
final String name = b.getString("name");
final String dob = b.getString("dob");
final String gender = b.getString("gender");
final String age = b.getString("age");
final String smoke = b.getString("smoke");
final String type = b.getString("type");
final String today = b.getString("today");
final String email = emailEditTextRegScreenFour.getText().toString();
final String password = passwordEditTextRegScreenFour.getText().toString();
if (email.contains("@") && email.contains(".com"))
{
Toast.makeText(RegistrationScreenFour.this, "@ and com available", Toast.LENGTH_SHORT).show();
Toast.makeText(RegistrationScreenFour.this, "email: " + email + "\npassword: " + password, Toast.LENGTH_SHORT).show();
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(RegistrationScreenFour.this, new OnCompleteListener<AuthResult>()
{
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful())
{
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(PersonContract.Person.COL_SMOKER_NAME, name);
values.put(PersonContract.Person.COL_SMOKER_DOB, dob);
values.put(PersonContract.Person.COL_SMOKER_GENDER, gender);
values.put(PersonContract.Person.COL_SMOKER_AGE_STARTED_SMOKING, age);
values.put(PersonContract.Person.COL_SMOKER_SMOKES_IN_ONE_DAY, smoke);
values.put(PersonContract.Person.COL_SMOKER_SMOKE_ANY_TODAY, today);
values.put(PersonContract.Person.COL_SMOKER_USERNAME, email);
values.put(PersonContract.Person.COL_SMOKER_PASSWORD, password);
values.put(PersonContract.Person.COL_SMOKER_LAST_LOGIN, true);
//dbHelper.addSmokerEntry(values);
PersonDetails personDetails =
new PersonDetails(name, Integer.parseInt(age),
dob, gender, smoke, today, email, password, type);
// I think the main problem arises here.
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
DatabaseReference courseRef = database.getReference("PersonDetails");
courseRef.child(email).setValue(personDetails);
Toast.makeText(RegistrationScreenFour.this, "task successful", Toast.LENGTH_SHORT).show();
Intent i = new Intent(RegistrationScreenFour.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
}
答案 0 :(得分:1)
我又发现了一个错误
您必须像这样初始化您的firebase数据库对象。 “PersonDetails”将是您数据库的子项。
DatabaseReference courseRef = FirebaseDatabase.getInstance().getReference().child("PersonDetails");
courseRef.child(email).setValue(personDetails);
我面临同样的问题。
将数据存储到Fire-base数据库时,使用电子邮件和密码创建用户
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference courseRef = database.getReference().child("PersonDetails");
courseRef.child(email).setValue(personDetails);
此时问题是您正在将用户的电子邮件设置为子级。 但Fire-base不允许这样做。
“@”和“。”这里是无效字符
如果您将电子邮件设置为密钥,则可以转到基于Fire的控制台并通过手动添加数据进行检查。火基不会允许它。
所以你必须使用电子邮件做一些额外的工作
在我的情况下,我通过删除“@”和“。”来管理它。来自电子邮件。
id = email.replace("@", "-");
id = id.replace(".", "-");
courseRef.child(id).setValue(personDetails);