数据未进入firebase

时间:2017-11-25 23:55:48

标签: android firebase firebase-realtime-database firebase-authentication

我有一个应用,其中用户有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);
                    }

1 个答案:

答案 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);