2017-06-23 8 views
-1

私は非常に簡単なアプリケーションを持っています。しかし、ボタンをクリックすると、アプリがクラッシュします。それをデバッグしようとすると、問題はonClickメソッドの最初の3行にあるようです。いったん私はその値を手作業で取得しようとしましたが、それらのエディットボックスではなく、すべてがスムーズに進みました。どんなアイデアですか?コンポーネントから変数を読み込んだ後にAndroidアプリがクラッシュする

public class MainActivity extends AppCompatActivity { 

    EditText editText_pocetKM; 
    EditText editText_spotreba; 
    EditText editText_cenaPHM; 
    TextView textView_spotrebaO; 
    TextView textView_cenaO; 

    DecimalFormat df = new DecimalFormat("0.00##"); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     editText_pocetKM = (EditText) findViewById(R.id.editText1_pocetKM); 
     editText_spotreba = (EditText) findViewById(R.id.editText_Spotreba); 
     editText_cenaPHM = (EditText) findViewById(R.id.editText1_cenaPHM); 
     textView_spotrebaO = (TextView) findViewById(R.id.textView_spotrebaO); 
     textView_cenaO = (TextView) findViewById(R.id.textView_cenaO); 
    } 

    public void onClick(View v) { 
     Double pocetKm = Double.parseDouble(editText_pocetKM.getText().toString()); 
     Double spotreba = Double.parseDouble(editText_spotreba.getText().toString()); 
     Double cenaPHM = Double.parseDouble(editText_cenaPHM.getText().toString()); 

     Double spotrebaO = spotreba * pocetKm/100; 
     Double cenaO = spotrebaO * cenaPHM; 

     textView_cenaO.setText("Cena za spotřebované palivo bude "+ df.format(cenaO) + " Kč"); 
     textView_spotrebaO.setText("Celkem bude spotřebováno "+ df.format(spotrebaO) + " litrů paliva"); 
    } 
} 
+0

エラーが発生したことを確認しておく必要があります。エラーと思われるものは何ですか? parseDoubleを使用している行は、NumberFormatExceptionをスローする可能性があります。また、それらのEditTextの1つがnullで、getTextを呼び出すときにエラーがスローされる – avi

答えて

0

クラッシュレポートのログキャットを指定していません。 logcatが提供された場合、私たちはあなたの正確な問題を確実にすることができます。しかし、とにかく、onClick関数の最初の3行を削除してクラッシュしなくても、無効な入力をEditTextに設定していると思います。

EditTextに入力されたテキストを解析して、入力が有効なdouble文字列でない場合に失敗します。たとえば、Helloの解析中に例外をスローすると、11.01が正常に解析されます。

したがって、アプリケーションが解析エラーでクラッシュするかどうかを確認するには、このようなブロックをtry/catchブロックで囲むことを検討してください。

try { 
    Double pocetKm = Double.parseDouble(editText_pocetKM.getText().toString()); 
    Double spotreba = Double.parseDouble(editText_spotreba.getText().toString()); 
    Double cenaPHM = Double.parseDouble(editText_cenaPHM.getText().toString()); 
} catch (Exception e) { 
    e.printStackTrace(); 
    Toast.makeText(this, "Parsing error", Toast.LENGTH_LONG).show(); 
} 
+1

、ありがとう! – cambis

+0

助けてくれて嬉しいです。 :) –

関連する問題