将复选框值存储到Firebase数据库

时间:2019-08-29 07:03:59

标签: java android firebase-realtime-database

我正在制作一个应用程序,我需要注册用户。我还有两个复选框,用户可以在其中选择性别(男性或女性)。我知道该复选框可以了解布尔值true或false,但是我想知道如何使用firebase做到这一点。 这正是我需要做的: how to override action bar back button in android?

这是我所做的:

private void SignUp(final String firstName, final String lastName, final String email, final String password, final String checkMale, final String checkFemale) {
        mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
     @Override
     public void onComplete(@NonNull Task<AuthResult> task) {
          if(task.isSuccessful()) {
               FirebaseUser user = mAuth.getCurrentUser();
               assert user != null;
               String userId =user.getUid();

               reference = FirebaseDatabase.getInstance().getReference().child("Users").child(userId);
               HashMap<String, Object> hashMap = new HashMap<>();
               hashMap.put("id", userId);
               hashMap.put("firstName", firstName);
               hashMap.put("lastName", lastName);
               hashMap.put("email", email.toLowerCase());
               if(male.isChecked() && female.isChecked()) {
                   hashMap.put("male", checkMale);
                   hashMap.put("female", checkFemale);
               }
               reference.setValue(hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {

     @Override
     public void onComplete(@NonNull Task<Void> task) {
          if(task.isSuccessful()) {
               pd.dismiss();
               Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
               intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
               startActivity(intent);
               Toast.makeText(RegisterActivity.this, "User Registered successfully", Toast.LENGTH_SHORT).show();
               }
          }
     });
     } else {
          pd.dismiss();
          Toast.makeText(RegisterActivity.this, "You can't register with this email or password", Toast.LENGTH_SHORT).show();
             }
      }
   });
 }

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用 Radio Buttons 代替复选框。

<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <RadioButton android:id="@+id/malleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Male"
        android:onClick="onRadioButtonClicked"/>
    <RadioButton android:id="@+id/femaleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Female"
        android:onClick="onRadioButtonClicked"/>
</RadioGroup>

在代码中,您可以检查选择了哪个。

public void onRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    // Check which radio button was clicked
    switch(view.getId()) {
        case R.id.maleButton:
            if (checked)
                hashMap.put("male", true);
            break;
        case R.id.femaleButton:
            if (checked)
                hashMap.put("male", false);
            break;
    }
}

如果用户只能选择一个,那么您也不需要在firebase男性和女性中存储2个变量。在其他情况下(如果用户可以同时选择两者),则存储2个变量并删除无线电组,以便用户可以同时选择两者。

答案 1 :(得分:0)

我认为在性别方面都无法一次检查,并且您保留了&&条件,因此在这里我不会工作:

 if(male.isChecked() && female.isChecked()) {
                    hashMap.put("male", checkMale);
                    hashMap.put("female", checkFemale);
 }

首先不需要保存男性和女性的价值。只需保留一次“性别”键,然后指定一个字符串或数字即可,例如男性为1或“ m”,女性为2或“ f”,并将其与所有值一起保存。

在这里您可以在RadioGroup“性别”中使用RadioButton,而不仅仅是RadioButtons。

供您参考:

if(male.isChecked())
      hashMap.put("gender", "m");
else
      hashMap.put("gender", "f");

答案 2 :(得分:0)

使用单选按钮代替复选框。

with testdata(vala, valb, valc) as(
   select '1,2,3,4' as vala
         ,'5,6,7,8' as valb
         ,'9,10,11' as valc
     from dual
)
select regexp_substr(vala,'[^,]+', 1, level) as vala -- Pick the 
      ,regexp_substr(valb,'[^,]+', 1, level) as valb -- value at this 
      ,regexp_substr(valc,'[^,]+', 1, level) as valc -- position or null
  from testdata
  connect by regexp_substr(vala,'[^,]+', 1, level) is not null -- Generate one row if 
          or regexp_substr(valb,'[^,]+', 1, level) is not null -- any of the positions
          or regexp_substr(valc,'[^,]+', 1, level) is not null -- would have a value

获取RadioGroup ID

<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rdgGender"
android:orientation="vertical">
<RadioButton android:id="@+id/rbMale"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Male"
    android:onClick="onRadioButtonClicked"/>
<RadioButton android:id="@+id/rbFemale"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Female"
    android:onClick="onRadioButtonClicked"/>
</RadioGroup>

在提交按钮上单击

RadioGroup rdgGender = findViewbyId(R.id.rdgGender);