Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单选按钮在Android中返回错误的值_Java_Android - Fatal编程技术网

Java 单选按钮在Android中返回错误的值

Java 单选按钮在Android中返回错误的值,java,android,Java,Android,我有一个表格,一个人可以输入朋友的详细信息(姓名、年龄、性别、地址)。此朋友显示在列表视图中,当单击列表中的朋友时,他们可以选择编辑该记录 我可以成功地更新关于朋友的每一个细节,除了性别 例如: 列表视图: 1) James Bond, 20, Male, Sydney NSW 然后单击“编辑”并将其更改为 James smith, 21, Female, Canberra NSW 然后回到我的列表视图,它将显示: 1) James smith, 21, Male, Canberra NSW

我有一个表格,一个人可以输入朋友的详细信息(姓名、年龄、性别、地址)。此朋友显示在列表视图中,当单击列表中的朋友时,他们可以选择编辑该记录

我可以成功地更新关于朋友的每一个细节,除了性别

例如:

列表视图:

1) James Bond, 20, Male, Sydney NSW
然后单击“编辑”并将其更改为

James smith, 21, Female, Canberra NSW
然后回到我的列表视图,它将显示:

1) James smith, 21, Male, Canberra NSW
注意到性别没有改变吗

我可以理解为什么会发生这种情况,因为我用同样的逻辑来改变姓名和年龄,就像我改变性别一样

以下是相关代码:

ViewFriend.java
(此类显示列表视图并具有编辑选项)

这就是问题所在,即使用户点击男性,它也会注册为女性,我不确定为什么


有什么办法可以解决这个问题吗?

您的问题是将
rb
变量的值设置为一个单选按钮,在这里用先前的性别值预定义

if (gender.equals("Male")){
  rb = (RadioButton)findViewById(R.id.resultGenderMale_update);
}
else if (gender.equals("Female"))
{
  rb = (RadioButton)findViewById(R.id.resultGenderFemale_update);
}
然后你们读取同一个按钮的值。要解决此问题,请单击更新按钮的侦听器,您需要使用单选组(您的
rg
变量)上的
getCheckedRadioButtonId
读取选中的单选按钮id

upd: 这就是编辑好友活动代码的外观

public class EditFriendActivity extends AppCompatActivity {
  private RadioGroup mGenderRadioGroup;
  private Button mUpdateButton;
  private EditText mNameField;
  private EditText mAddressField;
  private NumberPicker mAgePicker;
  private databaseManager4 mDatabaseManager;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_editordeletefriend);
    initUI();

    mDatabaseManager = new databaseManager4(this);
  }

  private void initUI() {
    Intent intent = getIntent();
    mNameField = (EditText) findViewById(R.id.fullName_update);
    mNameField.setText(intent.getStringExtra("name"));

    mAddressField = (EditText) findViewById(R.id.address_update);
    mAddressField.setText(intent.getStringExtra("address"));

    mAgePicker = (NumberPicker) findViewById(R.id.resultAge_update);
    mAgePicker.setMinValue(6);
    mAgePicker.setMaxValue(110);
    mAgePicker.setWrapSelectorWheel(false);
    mAgePicker.setValue(Integer.parseInt(intent.getStringExtra("age")));

    mUpdateButton = (Button) findViewById(R.id.update_button);
    mUpdateButton.setOnClickListener(updateClickListener);

    mGenderRadioGroup = (RadioGroup) findViewById(R.id.radioGroup_update);

    RadioButton targetRadioButton = null;
    switch (Gender.fromString(intent.getStringExtra("gender"))) {
      case MALE:
        targetRadioButton = (RadioButton) findViewById(R.id.resultGenderMale_update);
        break;
      case FEMALE:
        targetRadioButton = (RadioButton) findViewById(R.id.resultGenderFemale_update);
        break;
    }
    if (targetRadioButton != null) {
      targetRadioButton.setChecked(true);
    }
  }

  public void clear() {
    mNameField.setText("");
    mAddressField.setText("");
  }

  private Gender getSelectedGender() {
    int checkedButtonId = mGenderRadioGroup.getCheckedRadioButtonId();
    switch (checkedButtonId) {
      case R.id.resultGenderMale_update:
        return Gender.MALE;
      case R.id.resultGenderFemale_update:
        return Gender.FEMALE;
    }
    return Gender.UNDEFINED;
  }

  private View.OnClickListener updateClickListener =
      new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          Gender newGender = getSelectedGender();
          int code = Integer.parseInt(getIntent().getStringExtra("code"));
          System.out.println("gender is" + newGender.stringValue);
          if (mDatabaseManager.updateRow(
              code,
              mNameField.getText().toString(),
              mAgePicker.getValue(),
              newGender.stringValue,
              mAddressField.getText().toString())) {
            Toast.makeText(
                    getApplicationContext(),
                    "successfully updated the friend " + ed.getText().toString(),
                    Toast.LENGTH_SHORT)
                .show();
          } else {
            Toast.makeText(
                    getApplicationContext(),
                    "Could not  update the friend " + ed.getText().toString(),
                    Toast.LENGTH_SHORT)
                .show();
          }
          Intent viewFriendsIntent = new Intent(getApplicationContext(), viewFriends.class);
          startActivity(viewFriendsIntent);
          finish();
        }
      };

  private enum Gender {
    UNDEFINED("undefined"),
    MALE("Male"),
    FEMALE("Female");

    private @Nullable String stringValue;

    Gender(@Nullable String stringValue) {
      this.stringValue = stringValue;
    }

    public static Gender fromString(@Nullable String value) {
      if (value != null) {
        for (Gender gender : Gender.values()) {
          if (value.equals(gender.stringValue)) {
            return gender;
          }
        }
      }
      return UNDEFINED;
    }
  }
}

我不太明白。。。我添加了int id=rg.getCheckedRadioButtonId();rb=(单选按钮)findViewById(id)@它总是指向同一个单选按钮。
if (gender.equals("Male")){
  rb = (RadioButton)findViewById(R.id.resultGenderMale_update);
}
else if (gender.equals("Female"))
{
  rb = (RadioButton)findViewById(R.id.resultGenderFemale_update);
}
public class EditFriendActivity extends AppCompatActivity {
  private RadioGroup mGenderRadioGroup;
  private Button mUpdateButton;
  private EditText mNameField;
  private EditText mAddressField;
  private NumberPicker mAgePicker;
  private databaseManager4 mDatabaseManager;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_editordeletefriend);
    initUI();

    mDatabaseManager = new databaseManager4(this);
  }

  private void initUI() {
    Intent intent = getIntent();
    mNameField = (EditText) findViewById(R.id.fullName_update);
    mNameField.setText(intent.getStringExtra("name"));

    mAddressField = (EditText) findViewById(R.id.address_update);
    mAddressField.setText(intent.getStringExtra("address"));

    mAgePicker = (NumberPicker) findViewById(R.id.resultAge_update);
    mAgePicker.setMinValue(6);
    mAgePicker.setMaxValue(110);
    mAgePicker.setWrapSelectorWheel(false);
    mAgePicker.setValue(Integer.parseInt(intent.getStringExtra("age")));

    mUpdateButton = (Button) findViewById(R.id.update_button);
    mUpdateButton.setOnClickListener(updateClickListener);

    mGenderRadioGroup = (RadioGroup) findViewById(R.id.radioGroup_update);

    RadioButton targetRadioButton = null;
    switch (Gender.fromString(intent.getStringExtra("gender"))) {
      case MALE:
        targetRadioButton = (RadioButton) findViewById(R.id.resultGenderMale_update);
        break;
      case FEMALE:
        targetRadioButton = (RadioButton) findViewById(R.id.resultGenderFemale_update);
        break;
    }
    if (targetRadioButton != null) {
      targetRadioButton.setChecked(true);
    }
  }

  public void clear() {
    mNameField.setText("");
    mAddressField.setText("");
  }

  private Gender getSelectedGender() {
    int checkedButtonId = mGenderRadioGroup.getCheckedRadioButtonId();
    switch (checkedButtonId) {
      case R.id.resultGenderMale_update:
        return Gender.MALE;
      case R.id.resultGenderFemale_update:
        return Gender.FEMALE;
    }
    return Gender.UNDEFINED;
  }

  private View.OnClickListener updateClickListener =
      new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          Gender newGender = getSelectedGender();
          int code = Integer.parseInt(getIntent().getStringExtra("code"));
          System.out.println("gender is" + newGender.stringValue);
          if (mDatabaseManager.updateRow(
              code,
              mNameField.getText().toString(),
              mAgePicker.getValue(),
              newGender.stringValue,
              mAddressField.getText().toString())) {
            Toast.makeText(
                    getApplicationContext(),
                    "successfully updated the friend " + ed.getText().toString(),
                    Toast.LENGTH_SHORT)
                .show();
          } else {
            Toast.makeText(
                    getApplicationContext(),
                    "Could not  update the friend " + ed.getText().toString(),
                    Toast.LENGTH_SHORT)
                .show();
          }
          Intent viewFriendsIntent = new Intent(getApplicationContext(), viewFriends.class);
          startActivity(viewFriendsIntent);
          finish();
        }
      };

  private enum Gender {
    UNDEFINED("undefined"),
    MALE("Male"),
    FEMALE("Female");

    private @Nullable String stringValue;

    Gender(@Nullable String stringValue) {
      this.stringValue = stringValue;
    }

    public static Gender fromString(@Nullable String value) {
      if (value != null) {
        for (Gender gender : Gender.values()) {
          if (value.equals(gender.stringValue)) {
            return gender;
          }
        }
      }
      return UNDEFINED;
    }
  }
}