2017-09-01 4 views
-1

私はユーザー入力を取得してからそれらを2倍に解析しようとしています。私は彼らがnullであるかどうかをチェックして0に設定する方法を追加しましたが、それでもクラッシュしてエラーを出すことがあります。NumberFormatエラーEditTextからデータ入力を受けたときにアプリがクラッシュする原因

は、ここに私のコードです:私はすべてがnullのチェックを行った、特に以来、これの正確な原因についてはよく分からない

08-31 18:51:25.778 17735-17735/com.example.alexlevine.oceanapp 
    E/AndroidRuntime: FATAL EXCEPTION: main 

Process: com.example.alexlevine.oceanapp, PID: 17735 

java.lang.IllegalStateException: Could not execute method for 
android:onClick 

at 
android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener 
.onClick(AppCompatViewInflater.java:293) 

at android.view.View.performClick(View.java:6219) 

at android.view.View$PerformClick.run(View.java:24482) 

at android.os.Handler.handleCallback(Handler.java:769) 

at android.os.Handler.dispatchMessage(Handler.java:98) 

at android.os.Looper.loop(Looper.java:164) 

at android.app.ActivityThread.main(ActivityThread.java:6540) 

at java.lang.reflect.Method.invoke(Native Method) 

at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Caused by: java.lang.reflect.InvocationTargetException 

at java.lang.reflect.Method.invoke(Native Method) 

at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener 
.onClick(AppCompatViewInflater.java:288) 

at android.view.View.performClick(View.java:6219)  

at android.view.View$PerformClick.run(View.java:24482)  
                        at android.os.Handler.handleCallback(Handler.java:769)  
                        at android.os.Handler.dispatchMessage(Handler.java:98)  
                        at android.os.Looper.loop(Looper.java:164)  
                        at android.app.ActivityThread.main(ActivityThread.java:6540)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)  
                        Caused by: java.lang.NumberFormatException: For input string: "" 
                        at java.lang.Integer.parseInt(Integer.java:620) 
                        at java.lang.Integer.parseInt(Integer.java:643) 
                        at com.example.alexlevine.oceanapp.CarbonCalcActivity.onBtnClicked(CarbonCalcActivity.java:115) 
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                        at android.view.View.performClick(View.java:6219)  
                        at android.view.View$PerformClick.run(View.java:24482)  
                        at android.os.Handler.handleCallback(Handler.java:769)  
                        at android.os.Handler.dispatchMessage(Handler.java:98)  
                        at android.os.Looper.loop(Looper.java:164)  
                        at android.app.ActivityThread.main(ActivityThread.java:6540)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)  

package com.example.alexlevine.oceanapp; 

import android.app.Activity; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

import com.google.gson.Gson; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.List; 

public class CarbonCalcActivity extends AppCompatActivity { 

    //household energy 
    double electricity; 
    double naturalGas; 
    double fuelOil; 
    double propane; 

    EditText elecunit; 
    EditText elecbill; 
    EditText gasunit; 
    EditText gasbill; 
    EditText fuelunit; 
    EditText fuelbill; 
    EditText propunit; 
    EditText propbill; 
    //transportation 
    double vehicle1; 
    double vehicle2; 
    double vehicle3; 
    double publicTransport;//.42*number of miles 
    double airTravel; 

    EditText v1mpw; 
    EditText v1mpg; 
    EditText v2mpw; 
    EditText v2mpg; 
    EditText v3mpw; 
    EditText v3mpg; 
    EditText pub; 
    EditText air; 
    //food 
    double totalFood; 
    double meatFishEggs; 
    double cerealBakery; 
    double dairy; 
    double fruitVegetable; 
    double eatingOut; 
    double otherFoods; 

    EditText meat; 
    EditText cer; 
    EditText da; 
    EditText fv; 
    EditText out; 
    EditText otherf; 
    //services and goods 
    double totalSG; 
    double clothing; 
    double furnishHousehold; 
    double otherGoods; 
    double services; 

    double total; 

    EditText sg; 
    EditText cloth; 
    EditText furn; 
    EditText otherg; 
    EditText serv; 
    Button submit; 

    List<double[]> dataValues; 

    Context activity; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_carbon_calc); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     /* 
     SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putInt(getString(R.string.saved_high_score), newHighScore); 
     editor.commit();*/ 

     activity = CarbonCalcActivity.this; 

     dataValues= new ArrayList<double[]>(); 

     submit = (Button) findViewById(R.id.submitb); 

    } 

    public void onBtnClicked(View v){ 
     if(v.getId() == R.id.submitb){ 
      elecunit = (EditText) findViewById(R.id.kwh); 
      elecbill = (EditText) findViewById(R.id.elec); 
      if(elecunit != null && elecbill != null) { 
       electricity = (Integer.parseInt(elecbill.getText().toString())/Integer.parseInt(elecunit.getText().toString()))*1.37*12; 

      } 
      else 
       electricity = 0; 

      gasunit = (EditText) findViewById(R.id.cf); 
      gasbill = (EditText) findViewById(R.id.gas); 

      if(gasunit != null && gasbill != null) { 
       naturalGas = (Integer.parseInt(gasbill.getText().toString())/Integer.parseInt(gasunit.getText().toString()))*120.61*12; 

      } 
      else 
       naturalGas = 0; 

      fuelunit = (EditText) findViewById(R.id.fogal); 
      fuelbill = (EditText) findViewById(R.id.fo); 

      if(fuelunit != null && fuelbill != null) { 
       fuelOil = (Integer.parseInt(fuelbill.getText().toString())/Integer.parseInt(fuelunit.getText().toString()))*22.37*12; 

      } 
      else 
       fuelOil = 0; 

      propunit = (EditText) findViewById(R.id.progal); 
      propbill = (EditText) findViewById(R.id.pro); 

      if(propunit != null && propbill != null) { 
       propane = (Integer.parseInt(propbill.getText().toString())/Integer.parseInt(propunit.getText().toString()))*12.17*12; 

      } 
      else 
       propane = 0; 

      v1mpg = (EditText) findViewById(R.id.v1mpg); 
      v1mpw = (EditText) findViewById(R.id.v1mpw); 

      if(v1mpg != null && v1mpw != null) { 
       vehicle1 = ((Integer.parseInt(v1mpw.getText().toString())*52)/(Integer.parseInt(v1mpg.toString()))*19.4*(100/95)); 
      } 
      else { 
       vehicle1 = 0; 
      } 

      v2mpg = (EditText) findViewById(R.id.v2mpg); 
      v2mpw = (EditText) findViewById(R.id.v2mpw); 

      if(v2mpg != null && v2mpw != null) { 
       vehicle2 = ((Integer.parseInt(v2mpw.getText().toString())*52)/Integer.parseInt(v2mpg.toString()))*19.4*(100/95); 
      } 
      else { 
       vehicle2 = 0; 
      } 

      v3mpg = (EditText) findViewById(R.id.v3mpg); 
      v3mpw = (EditText) findViewById(R.id.v3mpw); 

      if(v3mpg != null && v3mpw != null) { 
       vehicle3 = ((Integer.parseInt(v3mpw.getText().toString())*52)/Integer.parseInt(v3mpg.toString()))*19.4*(100/95); 
      } 
      else { 
       vehicle3 = 0; 
      } 

      pub = (EditText) findViewById(R.id.pubmpy); 

      if(pub != null) { 
       publicTransport = (Integer.parseInt(pub.toString()))*.42; 

      } 
      else 
       publicTransport = 0; 

      air = (EditText) findViewById(R.id.airmpy); 

      if(air != null) { 
       airTravel = (Integer.parseInt(air.toString()))*223*1.2*1.9*.0022; 

      } 
      else 
       airTravel = 0; 

      meat = (EditText) findViewById(R.id.meat); 

      if(meat != null) { 
       meatFishEggs = (Integer.parseInt(meat.toString()))*1452*12*.0022; 

      } 
      else 
       meatFishEggs = 0; 

      cer = (EditText) findViewById(R.id.cereal); 

      if(cer != null) { 
       cerealBakery = (Integer.parseInt(cer.toString()))*741*12*.0022; 

      } 
      else 
       cerealBakery = 0; 

      da = (EditText) findViewById(R.id.dairy); 

      if(da != null) { 
       dairy = (Integer.parseInt(cer.toString()))*1911*12*.0022; 

      } 
      else 
       dairy = 0; 

      fv = (EditText) findViewById(R.id.fruit); 

      if(fv != null) { 
       fruitVegetable = (Integer.parseInt(fv.toString()))*1176*12*.0022; 

      } 
      else 
       fruitVegetable = 0; 

      out = (EditText) findViewById(R.id.out); 

      if(out != null) { 
       eatingOut = (Integer.parseInt(out.toString()))*368*12*.0022; 

      } 
      else 
       eatingOut = 0; 

      otherf = (EditText) findViewById(R.id.otherf); 

      if(otherf != null) { 
       otherFoods = (Integer.parseInt(otherf.toString()))*467*12*.0022; 

      } 
      else 
       otherFoods = 0; 

      totalFood = meatFishEggs+cerealBakery+dairy+fruitVegetable+eatingOut+otherFoods; 

      cloth = (EditText) findViewById(R.id.cloth); 

      if(cloth != null) { 
       clothing = (Integer.parseInt(cloth.toString()))*436*12*.0022; 

      } 
      else 
       clothing = 0; 

      furn = (EditText) findViewById(R.id.furnish); 

      if(furn != null) { 
       furnishHousehold = (Integer.parseInt(furn.toString()))*459*12*.0022; 

      } 
      else 
       furnishHousehold = 0; 

      otherg = (EditText) findViewById(R.id.otherg); 

      if(otherg != null) { 
       otherGoods = (Integer.parseInt(otherg.toString()))*338*12*.0022; 

      } 
      else 
       otherGoods = 0; 

      serv = (EditText) findViewById(R.id.serv); 

      if(serv != null) { 
       services = (Integer.parseInt(serv.toString()))*178*12*.0022; 

      } 
      else 
       services = 0; 

      totalSG = clothing + furnishHousehold + otherGoods + services; 

      Date currentTime = Calendar.getInstance().getTime(); 

      double[] currentData = new double[26]; 

      currentData[0] = currentTime.getMonth(); 
      currentData[1] = currentTime.getDate(); 
      currentData[2] = currentTime.getYear(); 
      currentData[3] = electricity; 
      currentData[4] = naturalGas; 
      currentData[5] = fuelOil; 
      currentData[6] = propane; 
      currentData[7] = electricity; 
      currentData[8] = vehicle1; 
      currentData[9] = vehicle2; 
      currentData[10] = vehicle3; 
      currentData[11] = publicTransport; 
      currentData[12] = airTravel; 
      currentData[13] = totalFood; 
      currentData[14] = meatFishEggs; 
      currentData[15] =cerealBakery; 
      currentData[16] = dairy; 
      currentData[17] = fruitVegetable; 
      currentData[18] = eatingOut; 
      currentData[19] = otherFoods; 
      currentData[20] = totalSG; 
      currentData[21] = clothing; 
      currentData[22] = furnishHousehold; 
      currentData[23] = otherGoods; 
      currentData[24] = services; 

      total = 0; 

      for(int i = 3; i < 25; i++) 
      { 
       total = total + currentData[i]; 
      } 

      currentData[25] = (total/2000); 

     } 
    } 

はここに私のログです。誰かがエラーを解決するのを助けることができますか?ありがとう!
elecunit =(EditText)findViewById(R.id.kwh); elecbill =(EditText)findViewById(R.id.elec);あなたはnullをチェックされている1つは、それ自体のEditTextとないのEditTextの値である..あなたはそれが好きでやっている私が気づいた

  String elecunitString = elecunit.getText().toString(); 
      String elecbillString = elecbill.getText().toString(); 

      if(elecunitString != "" && elecbillString != "") { 
       electricity = (Integer.parseInt(elecbill.getText().toString())/Integer.parseInt(elecunit.getText().toString()))*1.37*12; 

      } 
      else 
       electricity = 0; 
+0

は、あなたがのEditTextから解析する前に、整数にキャッチする文字列のための適切な検証を適用する、あなたのケースの文字列には空である可能性があります。 –

答えて

0

..

EditText editText = (EditText) findViewById(R.id.edittext); 
if(editText != null) { 
    value = Double.parseDouble(editText.getText().toString()); 
} else { 
    value = 0; 
} 

ので、適切なEditTextの値をチェックする方法は...この

EditText editText = (EditText) findViewById(R.id.edittext); 
String etString = editText.getText().toString(); 
if(etString.equals("")) { 
    value = Double.parseDouble(etString); 
} else { 
    value = 0; 
} 

のようにそれを行うとも多分あなたは手紙を変換すると、あなたはSを行うことができますので、あなたはNumberFormatExceptionがを取得するための文字列を変換することができているかどうかを確認しますomethingこの

private double parseStringToDouble(String sVal) { 
    if(!sVal.equals("")) { 
      try { 
       return Double.parseDouble(sVal); 
      } catch(Exception e) { 
       //will handle the exception 
       return 0; 
      } 
    } 
    else return 0; 
} 

好きで、あなたのEditTextから値を取得して

EditText et1 = (EditText) findViewById(R.id.et1); 
value1 = parseStringToDouble(et1.getText().toString()); 

EditText et2 = (EditText) findViewById(R.id.et2); 
value2 = parseStringToDouble(et2.getText().toString()); 
+0

私はあなたの最初の推奨事項を追加し、また、入力を取得するときに番号パッドを表示するようにEditTextを変更して、文字を入力できないようにしました。しかし、私はまだ同じエラーが発生しています。元の質問に新しいコードを追加しました。 –

+0

IllegalStateExceptionですか?私はあなたのXMLを見ることができますか?あなたは、文字列をチェックしているので(elecunitString.equals場合 –

+0

(elecunitString!=「」&& elecbillString!=「」)場合 。これは何をやっている..です再び をご確認ください..あなたは を使用する必要があります( "")&& elecbillString.equals( "")) –

関連する問題