0

私は、ユーザーにログインとサインアップという2つのオプションがあるアプリを持っています。 サインインオプションでは、ユーザーは自分のfirebaseのユーザー名とパスワードを入力し、MainActivityに正常に進みます。データがファイアベースに入っていない

サインアップオプションでは、ユーザーは4つの画面を同時に見ることができ、そこでは自分に関するデータを入力するよう求められます。最後の画面では、ユーザーにファイアベース登録のEメール/ユーザー名を尋ねられますが、何らかの理由でファイアベースDBにデータを入力するときにエラーが発生します。そして最も迷惑なことは、アンドロイドスタジオが私にエラーを表示していないということです。

いずれにせよ、コードは以下のとおりです。私はコメントとしてマークしています、 "私はここで主要な問題が発生すると思います。"私のコードのコメントとして。この流れは、RegScreen1→RegScreen2→RegScreen3→RegScreen4→MainActivityのようになります。しかし、何らかの理由で、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

私はあなたがこのようなあなたのfirebaseデータベースオブジェクトを初期化する必要がある1つの以上のミスに

を見つけました。 "PersonDetails"はあなたのデータベースの子になります。

DatabaseReference courseRef = FirebaseDatabase.getInstance().getReference().child("PersonDetails"); 
courseRef.child(email).setValue(personDetails); 

私は同じ問題に直面しています。あなたがあなたの子供のようにユーザーの電子メールを設定しているこの時点の問題で火災ベースのデータベース FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference courseRef = database.getReference().child("PersonDetails"); courseRef.child(email).setValue(personDetails);

にデータをされて保存されたときに電子メールとパスワードでユーザを作成した後

。 しかし、ファイヤーベースはこれを許可していません。

"@"と "。"ここでは無効な文字です

Fireベースコンソールにアクセスして、キーを火災ベースで許可しない場合に電子メールを設定すると手動でデータを追加することでチェックできます。

だから、あなたは私の場合は、電子メール

といくつかの追加作業を行う必要があり、私は「@」とを除去することによって、それを管理します「」電子メールから。

id = email.replace("@", "-"); 
id = id.replace(".", "-"); 
courseRef.child(id).setValue(personDetails); 
+0

いいえ、私はこれを試してみます。しかし、私は子変数として守るべきだとおっしゃっていますか?私は、名前、dob、性別、および電子メールの入力を取っています。 –

+0

はい、子変数として保持することができます。それはあなたにいくつかの利益を与えるでしょう。 名前、dobなどのユーザーのデータにアクセスしたい場合と同様に、ユーザーの電子メールがあります。 できることは "@"と "。"を単に置き換えてください。 " - "で、ユーザのデータに直接アクセスすることができます。 'id = email.replace(" @ "、" - "); id = id.replace( "。"、 " - "); DatabaseReference courseRef = database.getReference( 'PersonDetails')。子(id) ' – Taimoor

+0

残りのコードは大丈夫ですか?私はfirebaseのためのDBを宣言していると参照は、彼らは大丈夫ですか? –

関連する問題