如果我忽略另一个单选组,我可以得到文本,但我需要 2 列单选组,因此我创建了另一个。从那以后,我无法从两个无线电组获得文本。这是代码:
Save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
Connection con = connectionClass.CONN();
int selectedId = RadG.getCheckedRadioButtonId();
int selectedId1 = RadG1.getCheckedRadioButtonId();
RadioButton rb = (RadioButton) findViewById(selectedId);
RadioButton rb1 = (RadioButton) findViewById(selectedId1);
String Radbtn = rb.getText().toString().trim();
String Radbtn1 = rb1.getText().toString().trim();
String Vol = Vio.getText().toString();
getUID = UID.getText().toString();
String Contact = Cnumber.getText().toString();
if (rb1.isChecked()) {
String query = "Update Driver set ContactNumber='" + Contact + "', Violation='" + Radbtn + "',Comments='" + Vol + "' WHERE UID='" + getUID + "'";
PreparedStatement stmt = con.prepareStatement(query);
stmt.executeUpdate();
Toast.makeText(Main2Activity.this, "Saved", Toast.LENGTH_SHORT).show();
}
if (rb1.isChecked()) {
String query = "Update Driver set ContactNumber='" + Contact + "', Violation='" + Radbtn1 + "',Comments='" + Vol + "' WHERE UID='" + getUID + "'";
PreparedStatement stmt = con.prepareStatement(query);
stmt.executeUpdate();
Toast.makeText(Main2Activity.this, "Saved", Toast.LENGTH_SHORT).show();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
这是日志猫:
04-12 22:19:43.904 25667-25667/com.orig3.thesis W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.RadioButton.getText()' on a null object reference
04-12 22:19:43.907 25667-25667/com.orig3.thesis W/System.err: at com.orig3.thesis.Main2Activity$5.onClick(Main2Activity.java:251)
04-12 22:19:43.907 25667-25667/com.orig3.thesis W/System.err: at android.view.View.performClick(View.java:6291)
04-12 22:19:43.907 25667-25667/com.orig3.thesis W/System.err: at android.view.View$PerformClick.run(View.java:24931)
04-12 22:19:43.908 25667-25667/com.orig3.thesis W/System.err: at android.os.Handler.handleCallback(Handler.java:808)
04-12 22:19:43.908 25667-25667/com.orig3.thesis W/System.err: at android.os.Handler.dispatchMessage(Handler.java:101)
04-12 22:19:43.908 25667-25667/com.orig3.thesis W/System.err: at android.os.Looper.loop(Looper.java:166)
04-12 22:19:43.908 25667-25667/com.orig3.thesis W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7390)
04-12 22:19:43.908 25667-25667/com.orig3.thesis W/System.err: at java.lang.reflect.Method.invoke(Native Method)
04-12 22:19:43.908 25667-25667/com.orig3.thesis W/System.err: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
04-12 22:19:43.908 25667-25667/com.orig3.thesis W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)
04-12 22:19:46.349 25667-25674/com.orig3.thesis I/zygote64: Debugger is no longer active
这是我的无线电组的代码,我已经在使用OnChangelistener,我似乎找不到为什么它仍然为我的getCheckedRadioButtonId返回null
RadG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId != -1 && isChecking) {
isChecking = false;
RadG1.clearCheck();
}
isChecking = true;
}
});
RadG1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId != -1 && isChecking) {
isChecking = false;
RadG.clearCheck();
}
isChecking = true;
}
});
你在这两行之一上抛出了一个 NullPointerException:
String Radbtn = rb.getText().toString().trim();
String Radbtn1 = rb1.getText().toString().trim();
这意味着您的一个单选按钮为空,要么是rb
,要么是rb1
。它们由以下行初始化:
RadioButton rb = (RadioButton) findViewById(selectedId);
RadioButton rb1 = (RadioButton) findViewById(selectedId1);
一个为 null 表示findViewById()
找不到selectedId
为 ID 的视图。您选择的某个 ID 不是有效值。您可以从以下行获取它们:
int selectedId = RadG.getCheckedRadioButtonId();
int selectedId1 = RadG1.getCheckedRadioButtonId();
如果他们的 nto 有效,则意味着 getCheckRadioButtonId(( 返回错误。这意味着此组中没有选择单选按钮。
(如果您调试了代码,则可以自己找到此诊断(
溶液(已编辑(
您必须检查每个单选组中是否选择了某些内容,因为当未选择任何内容时,您可以单击保存按钮。已经解释的是文档,如果未选择任何内容getCheckedRadioButtonId
将返回-1。因此,添加一个 if selectId!=-1
以确保选择了某些内容。