'void android .widget.Switch.setOnCheckedChangeListener (android .widget.CompoundButton $ OnCheckedChangeListener)' для пустой ссылки на объект? - PullRequest
0 голосов
/ 05 марта 2020

У меня ошибка при переключении в классе java, и я не знаю, что мне делать

ошибка:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Switch.setOnCheckedChangeListener(android.widget.CompoundButton$OnCheckedChangeListener)' on a null object reference
        at com.example.aclcshsnotifier.AdminDrawer.onCreate(AdminDrawer.java:120)

код в java классе в методе OnCreate:

        final Switch sAllStudents = findViewById(R.id.switchStudent);
        final Switch sGrade = findViewById(R.id.switchGrade);
        final Switch sBlock = findViewById(R.id.switchBlock);
        final Switch sHouse = findViewById(R.id.switchHouse);
        final TextView student = findViewById(R.id.txtIndStudent);
        final TextView grade = findViewById(R.id.txtindGrade);
        final TextView block = findViewById(R.id.txtIndBlock);
        final TextView house = findViewById(R.id.txtIndHouse);

        sAllStudents.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (sAllStudents.isChecked()){
                    sGrade.setEnabled(true);
                    sBlock.setEnabled(true);
                    sHouse.setEnabled(true);
                    student.setEnabled(true);
                } else {
                    sGrade.setEnabled(false);
                    sBlock.setEnabled(false);
                    sHouse.setEnabled(false);
                    student.setEnabled(false);
                }
            }
        });

        sGrade.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (sGrade.isChecked()){
                    grade.setEnabled(true);
                } else {
                    grade.setEnabled(false);
                }
            }
        }); //the same format for sBlock and sHouse


xml с переключателем:

<Switch
            android:checked="false"
            android:text="All SHS Students"
            android:textSize="18sp"
            android:paddingLeft="20dp"
            android:paddingRight="180dp"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:id="@+id/switchStudent"
            android:background="@drawable/border"
            android:backgroundTint="#80ffffff" app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="60dp"/>

// другие переключатели, которые я инициализировал в классе java, совпадают с форматом switchStudent в xml

, что означает void android .widget.Switch.setOnCheckedChangeListener (android .widget .CompoundButton $ OnCheckedChangeListener) 'для пустой ссылки на объект означает?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Перед установкой setOnCheckedChangeListener следует добавить нулевую проверку на коммутатор, например:

Switch s = (Switch) findViewById(R.id.SwitchID);

 if (s != null) {
   s.setOnCheckedChangeListener(this);
 }

Это может решить вашу проблему.

0 голосов
/ 05 марта 2020

Это означает, что вы регистрируете setOnCheckedChangeListener () с нулевой ссылкой на объект. Пожалуйста, убедитесь, что Swich sAllStudents или sGrade имеет значение null или нет перед вызовом setOnCheckedChangeListener ().

...