私は、ユーザーにログインとサインアップという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);
}
いいえ、私はこれを試してみます。しかし、私は子変数として守るべきだとおっしゃっていますか?私は、名前、dob、性別、および電子メールの入力を取っています。 –
はい、子変数として保持することができます。それはあなたにいくつかの利益を与えるでしょう。 名前、dobなどのユーザーのデータにアクセスしたい場合と同様に、ユーザーの電子メールがあります。 できることは "@"と "。"を単に置き換えてください。 " - "で、ユーザのデータに直接アクセスすることができます。 'id = email.replace(" @ "、" - "); id = id.replace( "。"、 " - "); DatabaseReference courseRef = database.getReference( 'PersonDetails')。子(id) ' – Taimoor
残りのコードは大丈夫ですか?私はfirebaseのためのDBを宣言していると参照は、彼らは大丈夫ですか? –