0

が見つかりません。これは実際には私が見ていない単純な解決策だと確信しています。しかし、いくつかの機能(無関係なように見える)を変更しましたが、現在はnullポインタ例外エラーが発生しています。もし誰かが私のコードを見て助けてくれたら。私は自分のコードの重要な部分に絞り込むことができました。NullPointerExceptionエラーが発生し続ける場合は、

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:ここ

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

は、計算のためのコードを()である:ここ
tableRowShots = (TableRow)findViewById(R.id.shots_row); 
    tableRowShots.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      shotTextDialog().show(); 
      calculate(); 
     } 

    }); 

はshotTextDialog()のコードです: このコードは、警告ダイアログをトリガエラーはコード行の近くのどこかにあるようです:

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

誰かが私が見逃しているものは見えますか?

+0

if(shots.getText()。toString()。length()> 0) shotsDouble = Double.valueOf(shots.getText()。toString()); このような値を得る... –

+0

いくつかの行x?スタックトレースをポストしないと、正確な行が示されます。 – vertti

+0

アクティビティのレイアウトxmlにTextViews、shots_amount、powder_amountなどが定義されていますか?そのレイアウトをどこで膨張させていますか?例外を含むlogcat出力を投稿してください。 – Simon

答えて

1

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

そしてそれ何かのように、

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

もう一つ、

public Editable getEditableText() 

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

0

Logクラスを使用してアプリケーションをデバッグすることをお勧めします。 、あなたのJavaファイル内のさまざまなポイントで

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

への呼び出しを追加してアプリケーションを実行し、NullPointerExceptionがスローされる前に呼び出されることが最後だったかを確認するためにlogcatを確認してください。

0

getEditableText()がnullを返すようです。

ドキュメントは言う。..

public Editable getEditableText() 

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

getText()と交換してください。

関連する問題