不断收到NullPointerException错误,找不到位置

时间:2012-04-23 05:55:02

标签: android string nullpointerexception double android-alertdialog

我确信这是一个我只是没有看到的简单解决方案。但是,我改变了一些功能(这似乎是无关的),但现在我得到一个空指针异常错误,它只是没有让我自己明显到我能找到它。如果有人能查看我的代码并帮助我。我已经能够将其缩小到我的代码的关键部分。 此代码触发警报对话框:

    tableRowShots = (TableRow)findViewById(R.id.shots_row);
    tableRowShots.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            shotTextDialog().show();
            calculate();
      }

    });

这是shotTextDialog()的代码:

private Dialog shotTextDialog() {
    final View layout = View.inflate(this, R.layout.amount_edittext, null);

    final EditText savedText = (EditText) layout.findViewById(R.id.amountEditText);
    textViewShotsAmount = (TextView)findViewById(R.id.shots_amount);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Choose how many shots:");
    builder.setPositiveButton("Save", new Dialog.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            myTextString = savedText.getText().toString().trim();
            TextView sizeText = (TextView)findViewById(R.id.shots_amount);
            sizeText.setText(myTextString);
            Toast.makeText(getApplicationContext(), "You have chosen " + myTextString + " shots for your drink", Toast.LENGTH_SHORT).show();
        }
    });
    builder.setView(layout);
    return builder.create();
 }

这是calculate()的代码:

public void calculate() {
    double leftoverLiquid = 0;

    TextView shots = (TextView) this.findViewById(R.id.shots_amount);
    double shotsDouble = 0;
    if(shots != null) {
        shotsDouble = Double.valueOf(shots.getEditableText().toString());           
    }

    TextView powder = (TextView) this.findViewById(R.id.powder_amount);
    double powderDouble = 0;
    if(powder != null) {
        powderDouble = Double.valueOf(powder.getText().toString());
    }

    TextView add1 = (TextView) this.findViewById(R.id.additive_amount_1);
    double add1Double = 0;
    if(add1 != null) {
        add1Double = Double.valueOf(add1.getEditableText().toString());
    }

    TextView add2 = (TextView) this.findViewById(R.id.additive_amount_2);
    double add2Double = 0;
    if(add2 != null) {
        add2Double = Double.valueOf(add2.getEditableText().toString());
    }

    leftoverLiquid = size() - (powderDouble + shotsDouble + add1Double + add2Double);

    TextView liquid = (TextView) findViewById(R.id.liquid_amount);
    textViewLiquidAmount = liquid;
    liquid.setText(Double.toString(leftoverLiquid));

}

NullPointerException错误似乎落在代码行附近:

shotsDouble = Double.valueOf(shots.getEditableText().toString());

任何人都可以看到我遗失的任何内容吗?

3 个答案:

答案 0 :(得分:1)

只需检查TextView shots.getEditableText().toString()值,或者不为空,或者包含数字而非其他字母。

就像是,

 shotsDouble = Double.valueOf(shots.getText().toString().trim());  

还有一件事,

public Editable getEditableText ()

返回TextView显示为可编辑对象的文本。如果文本不可编辑,则返回null。

答案 1 :(得分:0)

我建议您使用Log类来调试您的应用程序。添加对

的调用
Log.v("Activity name", "line number: #");

在Java文件的不同位置,运行您的应用程序,并检查logcat,看看在NullPointerException被抛出之前最后一次调用它。

答案 2 :(得分:0)

似乎getEditableText()返回null。

文件说..

public Editable getEditableText ()

返回TextView显示为可编辑对象的文本。如果文本不可编辑,则返回null。

因此,请尝试将其替换为getText()