为什么我无法将数组中的视图分配给侦听器?

时间:2014-03-03 17:48:47

标签: java android arrays nullpointerexception oncheckedchanged

这是我班级的代码;我意识到这是一大块代码,但我觉得它与我的问题有关。

我有一组交换机和数组,这些交换机都放在这些交换机和数组中。

我的问题是;当我尝试将这些数组分配给onCheckedChanged侦听器时,它们会返回nullpointerexception。

然而;用

测试时
for(int i = 0; i<9;i++){
    if(whateverArrayImTesting[i] == null){
       Log.d(TAG, "NULL AT:" + i);
    }
}

我的所有开关都没有返回null;所以我不确定为什么我不能将它们分配给听众?

package com.example.ioiorun;

import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.spi.Log;
import android.R.bool;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ProgressBar;
import android.widget.Switch;
import android.widget.TableLayout;
import android.widget.TextView;
import android.support.v4.app.Fragment;

public class digitalFragment extends Fragment {
    String TAG;
    // Declare all the UI Variables
    TableLayout centralDigitalTable;
    View digitalfragmentview;

    Switch digitalIO0Mode;
    Switch digitalIO1Mode;
    Switch digitalIO2Mode;
    Switch digitalIO3Mode;
    Switch digitalIO4Mode;
    Switch digitalIO5Mode;
    Switch digitalIO6Mode;
    Switch digitalIO7Mode;
    Switch digitalIO8Mode;
    Switch digitalIO9Mode;

    Switch digitalIO0Power;
    Switch digitalIO1Power;
    Switch digitalIO2Power;
    Switch digitalIO3Power;
    Switch digitalIO4Power;
    Switch digitalIO5Power;
    Switch digitalIO6Power;
    Switch digitalIO7Power;
    Switch digitalIO8Power;
    Switch digitalIO9Power;

    Switch digitalInput0Power;
    Switch digitalInput1Power;
    Switch digitalInput2Power;
    Switch digitalInput3Power;

    TextView digitalIO0VoltageText;
    TextView digitalIO1VoltageText;
    TextView digitalIO2VoltageText;
    TextView digitalIO3VoltageText;
    TextView digitalIO4VoltageText;
    TextView digitalIO5VoltageText;
    TextView digitalIO6VoltageText;
    TextView digitalIO7VoltageText;
    TextView digitalIO8VoltageText;
    TextView digitalIO9VoltageText;

    TextView digitalInput0VoltageText;
    TextView digitalInput1VoltageText;
    TextView digitalInput2VoltageText;
    TextView digitalInput3VoltageText;

    ProgressBar digitalIO0VoltageProgress;
    ProgressBar digitalIO1VoltageProgress;
    ProgressBar digitalIO2VoltageProgress;
    ProgressBar digitalIO3VoltageProgress;
    ProgressBar digitalIO4VoltageProgress;
    ProgressBar digitalIO5VoltageProgress;
    ProgressBar digitalIO6VoltageProgress;
    ProgressBar digitalIO7VoltageProgress;
    ProgressBar digitalIO8VoltageProgress;
    ProgressBar digitalIO9VoltageProgress;

    ProgressBar digitalInput0VoltageProgress;
    ProgressBar digitalInput1VoltageProgress;
    ProgressBar digitalInput2VoltageProgress;
    ProgressBar digitalInput3VoltageProgress;

    ProgressBar[] digitalInputVoltageProgressArray = new ProgressBar[4];
    ProgressBar[] digitalIOVoltageProgressArray = new ProgressBar[10];
    Switch[] digitalIOModeSwitchArray = new Switch[10];
    Switch[] digitalIOPowerSwitchArray = new Switch[10];
    TextView[] digitalIOVoltageTextArray = new TextView [10];
    Switch[] digitalInputPowerSwitchArray = new Switch [4];
    TextView[] digitalInputVoltageTextArray = new TextView[4];


    Context superContext;

    public View onCreateView(LayoutInflater viewInflation, ViewGroup container,
            Bundle SavedInstantState) {
        superContext = getActivity().getApplicationContext();
        digitalfragmentview = viewInflation.inflate(
                R.layout.digitalfragment_page, container, false);

        digitalIO0Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio0mode);
        digitalIO1Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio1mode);
        digitalIO2Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio2mode);
        digitalIO3Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio3mode);
        digitalIO4Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio4mode);
        digitalIO5Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio5mode);
        digitalIO6Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio6mode);
        digitalIO7Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio7mode);
        digitalIO8Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio8mode);
        digitalIO9Mode = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio9mode);

        digitalIO0Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio0power);
        digitalIO1Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio1power);
        digitalIO2Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio2power);
        digitalIO3Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio3power);
        digitalIO4Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio4power);
        digitalIO5Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio5power);
        digitalIO6Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio6power);
        digitalIO7Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio7power);
        digitalIO8Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio8power);
        digitalIO9Power = (Switch) digitalfragmentview
                .findViewById(R.id.digitalio9power);

        digitalIO0VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio0voltage);
        digitalIO1VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio1voltage);
        digitalIO2VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio2voltage);
        digitalIO3VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio3voltage);
        digitalIO4VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio4voltage);
        digitalIO5VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio5voltage);
        digitalIO6VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio6voltage);
        digitalIO7VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio7voltage);
        digitalIO8VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio8voltage);
        digitalIO9VoltageProgress = (ProgressBar) digitalfragmentview
                .findViewById(R.id.digitalio9voltage);

        digitalIO0VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio0voltagetext);
        digitalIO1VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio1voltagetext);
        digitalIO2VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio2voltagetext);
        digitalIO3VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio3voltagetext);
        digitalIO4VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio4voltagetext);
        digitalIO5VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio5voltagetext);
        digitalIO6VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio6voltagetext);
        digitalIO7VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio7voltagetext);
        digitalIO8VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio8voltagetext);
        digitalIO9VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalio9voltagetext);

        digitalInput0VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalinput0voltagetext);
        digitalInput1VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalinput1voltagetext);
        digitalInput2VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalinput2voltagetext);
        digitalInput3VoltageText = (TextView) digitalfragmentview
                .findViewById(R.id.digitalinput3voltagetext);

        centralDigitalTable = (TableLayout) digitalfragmentview
                .findViewById(R.id.digitalTable);

        for (int i = 0; i < 9; i++) {
            switch (i) {
            case 0:
                digitalInputVoltageProgressArray[0] = digitalInput0VoltageProgress;
                digitalIOVoltageProgressArray[0] = digitalIO0VoltageProgress;
                digitalInputPowerSwitchArray[0] = digitalInput0Power;
                digitalIOModeSwitchArray[0] = digitalIO0Mode;
                digitalIOPowerSwitchArray[0] = digitalIO0Power;
                digitalIOVoltageTextArray[0] = digitalIO0VoltageText;
                digitalInputVoltageTextArray[0] = digitalInput0VoltageText;
                break;
            case 1:
                digitalInputVoltageProgressArray[1] = digitalInput1VoltageProgress;
                digitalIOVoltageProgressArray[1] = digitalIO1VoltageProgress;
                digitalInputPowerSwitchArray[1] = digitalInput1Power;
                digitalIOModeSwitchArray[1] = digitalIO1Mode;
                digitalIOPowerSwitchArray[1] = digitalIO1Power;
                digitalIOVoltageTextArray[1] = digitalIO1VoltageText;
                digitalInputVoltageTextArray[1] = digitalInput1VoltageText;
                break;
            case 2:
                digitalInputVoltageProgressArray[2] = digitalInput2VoltageProgress;
                digitalIOVoltageProgressArray[2] = digitalIO2VoltageProgress;
                digitalInputPowerSwitchArray[2] = digitalInput2Power;
                digitalIOModeSwitchArray[2] = digitalIO2Mode;
                digitalIOPowerSwitchArray[2] = digitalIO2Power;
                digitalIOVoltageTextArray[2] = digitalIO2VoltageText;
                digitalInputVoltageTextArray[2] = digitalInput2VoltageText;
                break;
            case 3:
                digitalInputVoltageProgressArray[3] = digitalInput3VoltageProgress;
                digitalIOVoltageProgressArray[3] = digitalIO3VoltageProgress;
                digitalInputPowerSwitchArray[3] = digitalInput3Power;
                digitalIOModeSwitchArray[3] = digitalIO3Mode;
                digitalIOPowerSwitchArray[3] = digitalIO3Power;
                digitalIOVoltageTextArray[3] = digitalIO3VoltageText;
                digitalInputVoltageTextArray[3] = digitalInput3VoltageText;
                break;
            case 4:
                digitalIOVoltageProgressArray[4] = digitalIO4VoltageProgress;
                digitalIOModeSwitchArray[4] = digitalIO4Mode;
                digitalIOPowerSwitchArray[4] = digitalIO4Power;
                digitalIOVoltageTextArray[4] = digitalIO4VoltageText;
                break;
            case 5:
                digitalIOVoltageProgressArray[5] = digitalIO5VoltageProgress;
                digitalIOModeSwitchArray[5] = digitalIO5Mode;
                digitalIOPowerSwitchArray[5] = digitalIO5Power;
                digitalIOVoltageTextArray[5] = digitalIO5VoltageText;
                break;
            case 6:
                digitalIOVoltageProgressArray[6] = digitalIO6VoltageProgress;
                digitalIOModeSwitchArray[6] = digitalIO6Mode;
                digitalIOPowerSwitchArray[6] = digitalIO6Power;
                digitalIOVoltageTextArray[6] = digitalIO6VoltageText;
                break;
            case 7:
                digitalIOVoltageProgressArray[7] = digitalIO7VoltageProgress;
                digitalIOModeSwitchArray[7] = digitalIO7Mode;
                digitalIOPowerSwitchArray[7] = digitalIO7Power;
                digitalIOVoltageTextArray[7] = digitalIO7VoltageText;
                break;
            case 8:
                digitalIOVoltageProgressArray[8] = digitalIO8VoltageProgress;
                digitalIOModeSwitchArray[8] = digitalIO8Mode;
                digitalIOPowerSwitchArray[8] = digitalIO8Power;
                digitalIOVoltageTextArray[8] = digitalIO8VoltageText;
                break;
            case 9:
                digitalIOVoltageProgressArray[9] = digitalIO9VoltageProgress;
                digitalIOModeSwitchArray[9] = digitalIO9Mode;
                digitalIOPowerSwitchArray[9] = digitalIO9Power;
                digitalIOVoltageTextArray[9] = digitalIO9VoltageText;
                break;
            }
        }

        for(int i = 0; i<digitalIOModeSwitchArray.length;i++){
            digitalIOModeSwitchArray[i].setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub
                    //Log.d(TAG, "The button works for switch:" + buttonView.getText());
                }
            });
        }

        return digitalfragmentview;
    }

    // BEGIN VOLTAGE TEXT RELATED METHODS

    public TextView getIOVoltageText(int index) {
        TextView IOVoltageText = null;
        for (int i = 0; i < digitalIOVoltageTextArray.length; i++) {
            if (i == index) {
                IOVoltageText = digitalIOVoltageTextArray[index];
            }
        }
        return IOVoltageText;
    }

    public void setIOVoltageText(int index, double voltage) {
        for (int i = 0; i < digitalIOVoltageTextArray.length; i++) {
            if (i == index) {
                digitalIOVoltageTextArray[index].setText("Voltage: "
                        + String.valueOf(voltage));
            }
        }
    }

    public TextView getInputVoltageText(int index) {
        TextView InputVoltageText = digitalInputVoltageTextArray[index];

        return InputVoltageText;
    }

    public void setInputVoltageText(int index, double voltage) {
        digitalInputVoltageTextArray[index].setText("Voltage: "
                + String.valueOf(voltage));
    }

    // END VOLTAGE TEXT RELATED METHODS

    // BEGIN VOLTAGE PROGRESSBAR RELATED METHODS
    public ProgressBar getIOProgressBar(int index) {
        ProgressBar IOVoltageProgress = digitalInputVoltageProgressArray[index];
        return IOVoltageProgress;
    }

    public void setIOProgressBar(int index, double voltage) {
        digitalIOVoltageProgressArray[index].setProgress((int) voltage);
    }

    public ProgressBar getInputProgressBar(int index) {
        ProgressBar InputVoltageProgress = digitalInputVoltageProgressArray[index];
        return InputVoltageProgress;
    }

    public void setInputProgressBar(int index, double voltage) {
        digitalInputVoltageProgressArray[index].setProgress((int) voltage);
    }

    // END VOLTAGE PROGRESSBAR RELATED METHODS

    // BEGIN SWITCH RELATED METHODS
    public Switch getIOPowerSwitch(int index) {
        return digitalIOPowerSwitchArray[index];
    }

    public void setIOPowerSwitch(int index, boolean status) {
        digitalIOPowerSwitchArray[index].setActivated(status);
    }

    public Switch getInputPowerSwitch(int index) {
        return digitalInputPowerSwitchArray[index];
    }

    public void setInputPowerSwitch(int index, boolean status) {
        digitalInputPowerSwitchArray[index].setActivated(status);
    }

    public Switch getIOModeSwitch(int index) {
        return digitalIOModeSwitchArray[index];
    }

    public void getIOModeSwitch(int index, boolean status) {
        digitalIOModeSwitchArray[index].setActivated(status);
    }

    // END SWITCH RELATED METHODS

    public TableLayout getCentralDigitalTable() {
        return centralDigitalTable;
    }

    public void setCentralDigitalTable(TableLayout centralDigitalTable) {
        this.centralDigitalTable = centralDigitalTable;
    }

    public View getDigitalFragmentView() {
        return digitalfragmentview;
    }

    public void setDigitalFragmentView(View digitalfragmentview) {
        this.digitalfragmentview = digitalfragmentview;
    }

}

编辑1:

for(int i = 0; i<digitalIOModeSwitchArray.length;i++){
            digitalIOModeSwitchArray[i].setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub
                    //Log.d(TAG, "The button works for switch:" + buttonView.getText());
                }
            });
        }

这是我所指的导致错误的循环。

1 个答案:

答案 0 :(得分:2)

您忘记初始化最后一个元素。

for (int i = 0; i < 9; i++) 

应该是

for (int i = 0; i < 10; i++)

所以你会从0到9而不是0到8。