获取单选组中的文本,具体取决于单击的单选组



如果我忽略另一个单选组,我可以得到文本,但我需要 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以确保选择了某些内容。

相关内容

最新更新