java.lang.NullPointerException: Attempt to invoke virtual method xxx on a null object reference

问题描述

在做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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值