没有值插入时按钮onclick崩溃

时间:2016-04-16 00:55:43

标签: java android xml android-layout android-studio

当用户点击按钮但在editText中没有任何值时,一切都运行得很完美。

我获取editText值并将其放在String中,然后我将String放入Double中。

这是代码:

 public class MainActivity extends AppCompatActivity {


    EditText editText;
    EditText editTextw;
    TextView textView7;
    TextView textView8;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        editText = (EditText) findViewById(R.id.editText);
        editTextw = (EditText) findViewById(R.id.with);

        textView8 = (TextView) findViewById(R.id.textView5);
        textView7 = (TextView) findViewById(R.id.textView3);

        final Button button1=(Button)findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {

                String height = editText.getText().toString();
                String weight = editTextw.getText().toString();

                Double hh = Double.parseDouble(height);
                Double w = Double.parseDouble(weight);

                Double h = hh/100;
                Double all = (w  / (h * h));

                Double number2 = (int)Math.round(all * 100)/(double)100;


                textView8.setText("BMI: " + number2);
                textView8.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));



                if (all < 18.5) {
                    textView7.setText("תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' +  "\"תת משקל\" ");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));
                } else if (all > 18.5 && all < 25.0) {
                    textView7.setText("תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + "\"משקל בריא\" ");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

                }else if (all > 25.0 && all < 30.0) {
                    textView7.setText(" תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + "\"עודף משקל\"");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

                }else if (all > 30.0) {
                    textView7.setText(" תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + " \"השמנת יתר\"");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

                }else  {
                textView7.setText(" תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + " \"השמנת יתר\"");
                textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

            }

            }
        });


        }
        }

这里是activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context="com.example.dor.maby.MainActivity"
    android:background="#FF5722"
    android:layout_marginTop="0dp">



    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:background="#FAFAFA"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/relativeLayout">


        <Button
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:text="חשב BMI "
            android:id="@+id/button"
            android:background="#FF7043"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="180dp"
            android:textColor="#FAFAFA"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="גובה"
            android:id="@+id/textView"
            android:layout_marginTop="42dp"
            android:layout_alignParentTop="true"
            android:layout_alignEnd="@+id/button" />

        <EditText
            android:digits="0123456789"
            android:inputType="numberDecimal"
            android:hint="@string/hint1"
            android:textSize="10dp"
            android:gravity="center"
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            android:id="@+id/editText"
            android:layout_alignBottom="@+id/textView"
            android:layout_alignStart="@+id/button" />

        <TextView
            android:gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="משקל"
            android:id="@+id/textView2"
            android:layout_centerVertical="true"
            android:layout_alignEnd="@+id/textView" />


        <EditText
            android:digits="0123456789"
            android:inputType="numberDecimal"
            android:textSize="10dp"
            android:hint="@string/hint"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:id="@+id/with"
            android:gravity="center"
            android:layout_alignBottom="@+id/textView2"
            android:layout_alignStart="@+id/editText" />


    </RelativeLayout>

    <TextView
        android:textSize="34sp"
        android:layout_gravity="center_horizontal"
        android:textColor="#E3F2FD"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/empty"
        android:id="@+id/textView5"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="130dp" />

    <TextView
        android:gravity="center"
        android:textSize="15sp"
        android:textColor="#E3F2FD"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/empty"
        android:id="@+id/textView3"
        android:layout_above="@+id/relativeLayout"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="85dp" />

</RelativeLayout>

4 个答案:

答案 0 :(得分:0)

当时可能会崩溃,因为除了数字之外,parseDouble都会失败。我的建议是检查空字符串,它是一个空字符串,不要解析并将你的双精度值设为默认值。

答案 1 :(得分:0)

在运行onclick代码之前,您应该检查Edittext的值 即

@Override
public void onClick(View v) 
{

if(!editText.getText().toString().isEmpty() && !editTextw.getText().toString().isEmpty())
{
  String height = editText.getText().toString();
  String weight = editTextw.getText().toString();
  .... REST of onclick code ....
}
else
{
  Toast toast = Toast.makeText(getApplicationContext, "Fill in both texts!", Toast.LENGTH_SHORT).show();
}

答案 2 :(得分:0)

检查高度和重量变量是否为空,以便使用它们。我创建了一个辅助方法来进行检查。例如:

  //helper method to check if String has null value
  private boolean checkNull(String value){
     return (value != null && !value.isEmpty());
  }

然后在onClick方法中,您可以执行以下操作;

String height = editText.getText().toString().trim();
String weight = editTextw.getText().toString().trim();

if(checkNull(height) && checkNull(weight) ){
    Double hh = Double.parseDouble(height);
    Double w = Double.parseDouble(weight);
}else{
    //make toast with error message
    return;
}

答案 3 :(得分:0)

    Try this way

    public class MainActivity extends AppCompatActivity {


    EditText editText;
    EditText editTextw;
    TextView textView7;
    TextView textView8;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        editText = (EditText) findViewById(R.id.editText);
        editTextw = (EditText) findViewById(R.id.with);

        textView8 = (TextView) findViewById(R.id.textView5);
        textView7 = (TextView) findViewById(R.id.textView3);

        final Button button1=(Button)findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {

                String height = editText.getText().toString();
                String weight = editTextw.getText().toString();

                if(height!=null && weight!=null && !height.equals("") && !weight.equals(""))
                {
                Double hh = Double.parseDouble(height);
                Double w = Double.parseDouble(weight);

                Double h = hh/100;
                Double all = (w  / (h * h));

                Double number2 = (int)Math.round(all * 100)/(double)100;


                textView8.setText("BMI: " + number2);
                textView8.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

                 }

                if (all < 18.5) {
                    textView7.setText("תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' +  "\"תת משקל\" ");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));
                } else if (all > 18.5 && all < 25.0) {
                    textView7.setText("תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + "\"משקל בריא\" ");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

                }else if (all > 25.0 && all < 30.0) {
                    textView7.setText(" תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + "\"עודף משקל\"");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

                }else if (all > 30.0) {
                    textView7.setText(" תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + " \"השמנת יתר\"");
                    textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                    textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

                }else  {
                textView7.setText(" תוצאה זאת מכניסה אותך לקטגוריה של" +'\n' + " \"השמנת יתר\"");
                textView7.setTypeface(textView7.getTypeface(), Typeface.BOLD);
                textView7.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));

            }

            }
        });


        }
        }