我是android / java的新手,所以请多多包涵。我的代码之前运行良好,但是自从我添加了for()循环以来,我一直在获取NullPointerException。有任何想法吗?

public class PreferencesActivity extends Activity {

SharedPreferences settings;
SharedPreferences.Editor editor;
static CheckBox box, box2;

private final static CheckBox[] boxes={box, box2};
private final static String[] checkValues={"checked1", "checked2"};


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    box=(CheckBox)findViewById(R.id.checkBox);
    box2=(CheckBox)findViewById(R.id.checkBox2);

    settings= getSharedPreferences("MyBoxes", 0);
    editor = settings.edit();

    if(settings != null){

    for(int i =0;i<boxes.length; i++)
        boxes[i].setChecked(settings.getBoolean(checkValues[i], false));
    }

}

@Override
protected void onStop(){
   super.onStop();

   for(int i = 0; i <boxes.length; i++){
   boolean checkBoxValue = boxes[i].isChecked();
   editor.putBoolean(checkValues[i], checkBoxValue);
   editor.commit();
   }

    }
}

最佳答案

您将boxbox2的值初始化为null(因为这是未明确分配时的默认值)。然后,在创建Checkbox数组boxes时使用这些值。因此,boxes具有两个空值。然后,您重新分配boxbox2的值。请注意,这对boxes数组中的值没有影响。因此,当您尝试访问数组中的值时,将得到一个NullPointerException

在为boxesbox分配值后,在box2中设置值。

10-08 18:26