0

これは本当に単純な解決策であり、私には見られないものだと確信しています。ただし、いくつかの機能を変更しましたが(これは無関係のようです)、nullポインター例外エラーが発生し、どこにあるのかがわかりません。誰かが私のコードを見て、私を助けてくれるなら。コードの重要なセクションに絞り込むことができました。このコードはアラートダイアログをトリガーします:

    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());

誰かが私が欠けているものを見ることができますか?

4

3 に答える 3

1

TextViewのshots.getEditableText().toString()値を確認してください。空でないか、他のアルファベットではなく数字が含まれています。

そしてそれは、

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

もう一つ、

public Editable getEditableText ()

TextViewが編集可能オブジェクトとして表示しているテキストを返します。テキストが編集できない場合は、nullが返されます。

于 2012-04-23T05:59:30.170 に答える
0

Logこのクラスを使用してアプリケーションをデバッグすることをお勧めします。に通話を追加する

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

Javaファイルのさまざまな時点で、アプリケーションを実行し、logcatをチェックして、NullPointerExceptionがスローされる前に最後に呼び出されたものを確認します。

于 2012-04-23T05:58:43.527 に答える
0

getEditableText()nullを返しているようです。

ドキュメントによると..

public Editable getEditableText ()

TextViewが編集可能オブジェクトとして表示しているテキストを返します。テキストが編集できない場合は、nullが返されます。

だから、それを。に置き換えてみてくださいgetText()

于 2012-04-23T06:04:18.570 に答える