问题描述
在做Android开发一个小app的时候,为了方便,我讲我的计算行列式功能做了可复用化,如下:
public double getDeterminant(String determinantText)
但是当在其他功能中调用这一函数时,报出了如下bug:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
病因
报出该bug主要是由于相关的控件没有初始化,即findViewById处出现了问题。
但我的源码中是做了正确的初始化,而且.xml布局文件中的控件id也是正确的,想了许久…原来是在其他功能中调用这一函数时,由于是调用了这一个函数,所以控件determinant_result
没有被初始化。
这里面是我把计算行列式的结果展示,也放在了这个函数中public double getDeterminant(String determinantText)
更改后如下:
calculate_determinant_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String determinantText = determinant_content.getText().toString(); // 获取行列式信息
try {
double resultD = getDeterminant(determinantText);
determinant_result.setText(new DecimalFormat("#.0000").format(resultD));
} catch (NonNumericalException e) {
determinant_result.setText("行列式必须是纯数字!");
} catch (NonSquareMatrixException e) {
determinant_result.setText("行列式必须是方阵!" + "\n" + e.getMessage());
}
}
});
}
原可复用计算行列式的函数签名如下:
public double getDeterminant(String determinantText)
throws NonNumericalException, NonSquareMatrixException