尝试在空对象引用上调用虚方法'boolean android.widget.CheckBox.isChecked()'

时间:2015-05-31 09:33:00

标签: android

我正在尝试显示所选项目值,因为我想稍后将它们存储到ArrayList中以将它们发送到服务器。目前,当我选择项目并单击按钮时,应用程序崩溃,我得到了一个错误的错误:Attempt to invoke virtual method 'boolean android.widget.CheckBox.isChecked()' on a null object reference

我该如何解决?

我感谢任何帮助。

MainActivity中的onCreate方法:

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

    ArrayList<Integer> arr = new ArrayList<Integer>();
    arr.add(2);
    arr.add(4);
    arr.add(6);
    createCheckboxList(arr);

}

MainActivity中的createCheckboxList方法:

 private void createCheckboxList(final ArrayList<Integer> items) {


        final LinearLayout ll = (LinearLayout) findViewById(R.id.lila);
        for (int i = 0; i < items.size(); i++) {
           CheckBox cb = new CheckBox(this);
            cb.setText(String.valueOf(items.get(i)));
            cb.setId(i);
            ll.addView(cb);

        }
        Button btn = new Button(this);
        btn.setLayoutParams(new LinearLayout.LayoutParams(500, 150));
        btn.setText("submit");
        ll.addView(btn);

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                for (int i : items) {
                    //boolean checked = ((CheckBox)v).isChecked();
                    CheckBox ch=(CheckBox) findViewById(i); 
                    if (ch.isChecked()) {

                        Toast.makeText(getApplicationContext(), 
                                   "Button is clicked" + ch, Toast.LENGTH_LONG).show();

                    }
                }

            }
        });

    }

xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.bustracker.MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:paddingLeft="10dp"
        android:text="Select route: "
        android:textSize="30sp" />

    <LinearLayout
        android:id="@+id/lila"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.75"
        android:orientation="vertical" >
    </LinearLayout>



</LinearLayout>

2 个答案:

答案 0 :(得分:1)

将您的第一个for循环更改为此

for (int i = 0; i < items.size(); i++) {
       CheckBox cb = new CheckBox(this);
        cb.setText(String.valueOf(items.get(i)));
        cb.setId(items.get(i));
        ll.addView(cb);

    }

编辑:要在单个Toast中显示所有值,您可以执行类似

的操作
@Override
        public void onClick(View v) {
            String message = "";
            for (int i : items) {
                //boolean checked = ((CheckBox)v).isChecked();
                CheckBox ch=(CheckBox) findViewById(i); 
                if (ch.isChecked()) {
                    message = message + " " + ch.getText() + " " ;                   
                }
            }
            Toast.makeText(getApplicationContext(), 
                               "Button is clicked " + message, Toast.LENGTH_LONG).show();

        }

答案 1 :(得分:1)

尝试将复选框的ID设置为items.get(i)not i