2016-08-24 4 views
0

editTextフィールドが空の場合、アプリケーションがクラッシュする代わりに結果が表示されないようにしたいと考えています。 How to break out or exit a method in Java?TextViewにテキストがないときにメソッドを返す方法は?

だけでなく、数が負または正であったかどうかに基づいて、いくつかの他の結果:

は、私はここで、この結果を読み返します。私はこれで約1時間働いていて、タオルを投げています。私はこれが初めてで、if文を正しい場所に置かないといけないと思いますか?

ここにコードがあります。正しい方向のポインタがあれば助かります。ありがとう。

public class incomePage extends AppCompatActivity { 
    EditText perYearAmount; 
    EditText perMonthAmount; 
    EditText perWeekAmount; 
    Button totalButton; 
    TextView addResult; 


    double year, month, week, sum; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_income_page); 
     perYearAmount = (EditText) findViewById(R.id.perYearAmount); 
     perMonthAmount = (EditText) findViewById(R.id.perMonthAmount); 
     perWeekAmount = (EditText) findViewById(R.id.perWeekAmount); 
     totalButton = (Button) findViewById(R.id.totalButton); 
     addResult = (TextView) findViewById(R.id.totalMonthlyIncome); 


     totalButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       year = Double.parseDouble(perYearAmount.getText().toString()); 
       month = Double.parseDouble(perMonthAmount.getText().toString()); 
       week = Double.parseDouble(perWeekAmount.getText().toString()); 
       sum = year + month + week; 
       addResult.setText(Double.toString(sum)); 
       if (perYearAmount.getText().toString().equals("")) { 
        return; 
       } 
       if (perMonthAmount.getText().toString().equals("")) { 
        return; 
       } 
       if (perWeekAmount.getText().toString().equals("")) { 
        return; 
       } 
       if (totalButton.getText().toString().equals("")) { 
        return; 
       } 
       if (addResult.getText().toString().equals("")) { 
        return; 
       } 

      } 
     }); 

    } 
} 

ここにlogCatエラーがあります。あなたたちは速いです!

08-24 15:49:31.799 15154-16038/com.example.android.budgeit10 D/OpenGLRenderer: Enabling debug mode 0 
08-24 15:49:35.123 15154-16038/com.example.android.budgeit10 D/OpenGLRenderer: endAllStagingAnimators on 0xb8937048 (RippleDrawable) with handle 0xb897a910 
08-24 15:49:36.645 15154-16038/com.example.android.budgeit10 D/OpenGLRenderer: endAllStagingAnimators on 0xb89e95a0 (RippleDrawable) with handle 0xb89ebac8 
08-24 15:49:50.694 15154-15154/com.example.android.budgeit10 D/AndroidRuntime: Shutting down VM 
08-24 15:49:50.695 15154-15154/com.example.android.budgeit10 E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.example.android.budgeit10, PID: 15154 
                       java.lang.NumberFormatException: Invalid double: "" 
                        at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
                        at java.lang.StringToReal.parseDouble(StringToReal.java:267) 
                        at java.lang.Double.parseDouble(Double.java:301) 
                        at com.example.android.budgeit10.incomePage$1.onClick(incomePage.java:34) 
                        at android.view.View.performClick(View.java:4785) 
                        at android.view.View$PerformClick.run(View.java:19884) 
                        at android.os.Handler.handleCallback(Handler.java:739) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5343) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
+0

実際の問題を間違った方法で解決していると思います。あなたのアプリがクラッシュするのはなぜですか?エラーは何ですか? –

+0

logcat/errorメッセージを投稿する –

+0

あなたの質問にクラッシュログを追加してください(クラッシュを起こしている場合、おそらく原因は 'NumberFormatException'です) – PPartisan

答えて

2

あなたはEditTextが数値として(おそらく)非既存のテキストを解析しよう前内のテキストを持っているかどうかを確認する必要があります。例えば、私が入力して、二回perYearAmount.getText().toString()の実行を避けるためにyearString一時変数を作成

String yearString = perYearAmount.getText().toString(); 

if (!"".equals(yearString)) { 
    year = Double.parseDouble(yearString); 
} 

注意。

0

TextUtilsを使用してください。

totalButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     if (TextUtils.isEmpty(perYearAmount.getText().toString())|| 
      TextUtils.isEmpty(perMonthAmount.getText().toString())|| 
      TextUtils.isEmpty(perWeekAmount.getText().toString())) { 

       addResult.setText(""); // if any of the fields is empty, add nothing to textview 

     } else { 
      year = Double.parseDouble(perYearAmount.getText().toString()); 
      month = Double.parseDouble(perMonthAmount.getText().toString()); 
      week = Double.parseDouble(perWeekAmount.getText().toString()); 
      sum = year + month + week; 
      addResult.setText(Double.toString(sum)); 
     } 
     } 
    }); 
+0

それはトリックを行うように見えました。私はこの時点でそれの背後にある "なぜ"を本当に理解していませんが、ゆっくりとしかし確実にそこに着くでしょう。ありがとう!! –

0

クラッシュは、引数が解析可能なdoubleないときDouble.parseDouble()メソッドによってスローされNumberFormatException、によって引き起こされます。あなたのエラーログでは、これは空のStringのように表示されます。

java.lang.NumberFormatException: Invalid double: "" 

これを回避するには、try/catchブロック内の任意のDouble.parseDouble()呼び出しを囲むことができます:

try { 
    Double.parseDouble(anEditText.getText().toString()); 
} catch (NumberFormatException nfe) { 
    //anEditText does not contain a parsable Double 
} 

編集: へコードを使用して例を作成してください:

double year = 0; 
double month = 0; 
try { 
    year = Double.parseDouble(perYearAmount.getText().toString()); 
    month = Double.parseDouble(perMonthAmount.getText().toString()); 
} catch (NumberFormatException nfe) { 
    Toast.makeText(this, "Please enter a valid number and try again", Toast.LENGTH_SHORT).show(); 
    return; 
} 

double sum = year + month; 
//etc... 
+0

私の無知を許してください。しかし、私はこれを具体的にどこに追加しますか? –

+0

@DavidShinabarger問題ありません。質問のコードを使用して回答を編集しました。 – PPartisan

関連する問題