0

だから基本的に私は問題を抱えています。ユーザーが値を入力せずに計算ボタン (私は電卓を作成しています) を押すと、アプリがクラッシュします。代わりにメッセージを表示したいのですが、方法がわかりません。(更新しました)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.waist2height); {
        //h is cm edittext 
        final EditText h = (EditText)findViewById(R.id.editText2);
        final EditText w = (EditText)findViewById(R.id.editText3);

        final EditText r = (EditText)findViewById(R.id.textView4);

    });

        calculate.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // TODO Auto-generated method stub

            float height=0;
            float weight=0;
            float result=0;



            result = (float) (( weight / height ) + 0.005) ;

            if ((h.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show();
                   float height = Float.parseFloat(h.getText().toString());
                }
                if ((w.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show();
                   float weight = Float.parseFloat(w.getText().toString());
                }


            r.setText(String.valueOf(result));
            }

以下のコードは私が問題を抱えている場所です

if ((h.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show();
                   float height = Float.parseFloat(h.getText().toString());
                }
                if ((w.getText().toString()).equals(""))
                {
                   Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show();
                   float weight = Float.parseFloat(w.getText().toString());
                }

これは私が思いつくことができる最高のものですが、うまくいきません。

これがLogCatです(更新済み)

    09-20 18:50:38.509: E/AndroidRuntime(29769): FATAL EXCEPTION: main
09-20 18:50:38.509: E/AndroidRuntime(29769): Process: com.NovaPlex.personalfitnessfree, PID: 29769
09-20 18:50:38.509: E/AndroidRuntime(29769): java.lang.NumberFormatException: Invalid float: ""
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.StringToReal.invalidReal(StringToReal.java:63)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.StringToReal.parseFloat(StringToReal.java:308)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.Float.parseFloat(Float.java:306)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at com.NovaPlex.personalfitnessfree.WH$2.onClick(WH.java:80)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.view.View.performClick(View.java:4780)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.view.View$PerformClick.run(View.java:19866)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.os.Handler.handleCallback(Handler.java:739)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.os.Handler.dispatchMessage(Handler.java:95)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.os.Looper.loop(Looper.java:135)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at android.app.ActivityThread.main(ActivityThread.java:5254)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.reflect.Method.invoke(Native Method)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at java.lang.reflect.Method.invoke(Method.java:372)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
09-20 18:50:38.509: E/AndroidRuntime(29769):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
4

4 に答える 4

1

使用しないでください== null。完了したと仮定するとfindviewbyid、null にすることはできません。中身はチェックしません。

これは、EditText が空かどうかを調べる簡単な方法です。パラメータは、チェックしたい EditText でありtrue、空/空falseでない場合に返されます。

private boolean isEmpty(EditText etText) {
    return etText.getText().toString().trim().length() <= 0;
}

編集 :

xml ファイルで を使用して、クラスで選択した ID (この場合は ) でandroid:id="@+id/someId新しいリソースを作成するように Android に指示します。その際、その値をビューに割り当てます。someIdR.javafindviewbyid

要するに、OP がEditText EditText1 = (EditText) findViewById(R.id.myFistEditText);以前のようなことを行い、後でそれを自分のiflike(EditText1 == null)で比較しようとした場合、実際には EditText でテキストの値を取得していません。つまり、このビューは以前に見つかり、割り当てられていることを伝えているだけです。

于 2015-09-13T16:52:15.393 に答える
1

に値が入力されていないかどうかを確認するために、これを試すことができますEditText

if ((EditText1.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show();
}
if ((EditText2.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show();
}

.matches("")または、代わりに使用できます.equals("")

アップデート

このようにしなければなりません

if (!(h.getText().toString()).equals(""))
{
   height= Float.parseFloat(h.getText().toString());
}

if (!(w.getText().toString()).equals(""))
{
   weight= Float.parseFloat(w.getText().toString());
}

アップデート

if ((EditText1.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show();
}
if ((EditText2.getText().toString()).equals(""))
{
   Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show();
}
if (!(h.getText().toString()).equals(""))
{
   height= Float.parseFloat(h.getText().toString());
}
if (!(w.getText().toString()).equals(""))
{
   weight= Float.parseFloat(w.getText().toString());
}

あなたの代わりに上記のコードを置き換えます

于 2015-09-13T16:55:57.860 に答える