当我单击该按钮时,我的应用程序意外停止

时间:2016-08-01 17:34:16

标签: java android

如果我将某些文本框留空并单击按钮应用程序意外停止,我需要通过将未填充的文本框分配给0并计算总和来计算总和。请提供一些解决方案

package com.sabari.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.text.Editable;

public class MainActivity extends AppCompatActivity {

    TextView tv1;
    TextView tv2;
    TextView tv3;
    TextView tv4;
    TextView tv5;
    TextView tv6;
    TextView tv7;
    TextView tv8;
    TextView tv10;
    EditText et1;
    EditText et2;
    EditText et3;
    EditText et4;
    EditText et5;
    EditText et6;
    EditText et7;
    EditText et8;
    Button b1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv1 = (TextView)findViewById(R.id.textView);
        tv2 = (TextView)findViewById(R.id.textView2);
        tv3 = (TextView)findViewById(R.id.textView3);
        tv4 = (TextView)findViewById(R.id.textView4);
        tv5 = (TextView)findViewById(R.id.textView5);
        tv6 = (TextView)findViewById(R.id.textView6);
        tv7 = (TextView)findViewById(R.id.textView7);
        tv8 = (TextView)findViewById(R.id.textView8);







        b1=(Button)findViewById(R.id.button);


        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                et1 = (EditText)findViewById(R.id.editText);
                et2 = (EditText)findViewById(R.id.editText2);
                et3 = (EditText)findViewById(R.id.editText3);
                et4 = (EditText)findViewById(R.id.editText4);
                et5 = (EditText)findViewById(R.id.editText5);
                et6 = (EditText)findViewById(R.id.editText6);
                et7 = (EditText)findViewById(R.id.editText7);
                et8 = (EditText)findViewById(R.id.editText8);


                tv10 = (TextView)findViewById(R.id.textView10);
                int n;



                     double no1,no2,no3,no4,no5,no6,no7,no8;

                     no1 = Double.parseDouble(et1.getText().toString());
                     no2 = Double.parseDouble(et2.getText().toString());
                     no3 = Double.parseDouble(et3.getText().toString());
                     no4 = Double.parseDouble(et4.getText().toString());
                     no5 = Double.parseDouble(et5.getText().toString());
                     no6 = Double.parseDouble(et6.getText().toString());
                     no7 = Double.parseDouble(et7.getText().toString());
                     no8 = Double.parseDouble(et8.getText().toString());



                     if (no2 <= 0||TextUtils.isEmpty(et2.getText().toString())) {
                         no2=0;
                         n = 1;
                     } else if (no3 <= 0||TextUtils.isEmpty(et3.getText())) {
                         no3=0;
                         n = 2;
                     } else if (no4 <= 0||TextUtils.isEmpty(et4.getText())) {
                         no4=0;
                         n = 3;
                     } else if (no5 <= 0||TextUtils.isEmpty(et5.getText())) {
                         no5=0;
                         n = 4;
                     } else if (no6 <= 0||TextUtils.isEmpty(et6.getText())) {
                         no6=0;
                         n = 5;
                     } else if (no7 <= 0||TextUtils.isEmpty(et7.getText())) {
                         no7=0;
                         n = 6;
                     } else if (no8 <= 0||TextUtils.isEmpty(et8.getText())) {
                         no8=0;
                         n = 7;
                     } else {
                         n = 8;
                     }

                double   res=0;





                res = (no1+no2+no3+no4+no5+no6+no7+no8)/n;
                tv10.setText(""+res);

            }

        });


        }



    }

这是我的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.sabari.myapplication.MainActivity">

    <ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 1st Semester GPA"
            android:id="@+id/textView" />

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 2nd Semester GPA"
            android:id="@+id/textView2" />

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText2" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 3rd Semester GPA"
            android:id="@+id/textView3" />

        <EditText
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText3"
            android:layout_gravity="center_horizontal" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 4th Semester GPA"
            android:id="@+id/textView4" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText4" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 5th Semester GPA"
            android:id="@+id/textView5" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText5" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 6th Semester GPA"
            android:id="@+id/textView6" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText6" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 7th Semester GPA"
            android:id="@+id/textView7" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText7"
            android:layout_gravity="center_horizontal" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Enter Your 8th Semester GPA"
            android:id="@+id/textView8" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/editText8"
            android:layout_gravity="center_horizontal" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button"
            android:layout_gravity="center_horizontal" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/textView10" />
    </LinearLayout>
</ScrollView>

</LinearLayout>

这是我的logcat

08-01 23:11:06.724 15049-15049/com.sabari.myapplication I/art: Not late-enabling -Xcheck:jni (already on)
08-01 23:11:07.906 15049-15049/com.sabari.myapplication W/System: ClassLoader referenced unknown path: /data/app/com.sabari.myapplication-1/lib/x86
08-01 23:11:15.089 15049-15049/com.sabari.myapplication W/System: ClassLoader referenced unknown path: /data/app/com.sabari.myapplication-1/lib/x86
08-01 23:11:16.037 15049-15049/com.sabari.myapplication W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
08-01 23:11:16.079 15049-15055/com.sabari.myapplication W/art: Suspending all threads took: 6.289ms
08-01 23:11:16.254 15049-15100/com.sabari.myapplication D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                                          [ 08-01 23:11:16.333 15049:15049 D/         ]
                                                                          HostConnection::get() New Host Connection established 0xaa9a85f0, tid 15049
08-01 23:11:16.825 15049-15100/com.sabari.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4
08-01 23:11:17.577 15049-15100/com.sabari.myapplication W/EGL_emulation: eglSurfaceAttrib not implemented
08-01 23:11:17.577 15049-15100/com.sabari.myapplication W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xae63fc40, error=EGL_SUCCESS
08-01 23:11:17.874 15049-15049/com.sabari.myapplication I/Choreographer: Skipped 66 frames!  The application may be doing too much work on its main thread.
08-01 23:11:19.488 15049-15049/com.sabari.myapplication I/Choreographer: Skipped 70 frames!  The application may be doing too much work on its main thread.
08-01 23:11:41.841 15049-15049/com.sabari.myapplication D/AndroidRuntime: Shutting down VM
08-01 23:11:41.848 15049-15049/com.sabari.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.sabari.myapplication, PID: 15049
                                                                          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.sabari.myapplication.MainActivity$1.onClick(MainActivity.java:83)
                                                                              at android.view.View.performClick(View.java:5198)
                                                                              at android.view.View$PerformClick.run(View.java:21147)
                                                                              at android.os.Handler.handleCallback(Handler.java:739)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-01 23:11:47.178 15049-15049/com.sabari.myapplication I/Process: Sending signal. PID: 15049 SIG: 9
08-01 23:31:19.040 15155-15155/com.sabari.myapplication W/System: ClassLoader referenced unknown path: /data/app/com.sabari.myapplication-1/lib/x86
08-01 23:31:21.349 15155-15155/com.sabari.myapplication W/System: ClassLoader referenced unknown path: /data/app/com.sabari.myapplication-1/lib/x86
08-01 23:31:21.417 15155-15155/com.sabari.myapplication W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
08-01 23:31:21.471 15155-15209/com.sabari.myapplication D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                                          [ 08-01 23:31:21.474 15155:15155 D/         ]
                                                                          HostConnection::get() New Host Connection established 0xad17f430, tid 15155


                                                                          [ 08-01 23:31:21.516 15155:15209 D/         ]
                                                                          HostConnection::get() New Host Connection established 0xad17f6d0, tid 15209
08-01 23:31:21.522 15155-15209/com.sabari.myapplication I/OpenGLRenderer: Initialized EGL, version 1.4
08-01 23:31:21.599 15155-15209/com.sabari.myapplication W/EGL_emulation: eglSurfaceAttrib not implemented
08-01 23:31:21.599 15155-15209/com.sabari.myapplication W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xaaabbd00, error=EGL_SUCCESS
08-01 23:31:37.374 15155-15155/com.sabari.myapplication D/AndroidRuntime: Shutting down VM
08-01 23:31:37.375 15155-15155/com.sabari.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.sabari.myapplication, PID: 15155
                                                                          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.sabari.myapplication.MainActivity$1.onClick(MainActivity.java:83)
                                                                              at android.view.View.performClick(View.java:5198)
                                                                              at android.view.View$PerformClick.run(View.java:21147)
                                                                              at android.os.Handler.handleCallback(Handler.java:739)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-01 23:31:48.516 15155-15155/com.sabari.myapplication I/Process: Sending signal. PID: 15155 SIG: 9

2 个答案:

答案 0 :(得分:0)

当你在问题中提到空的editexts时,行:

no1 = Double.parseDouble(et1.getText().toString());
....

将抛出未被捕获的java.lang.NumberFormatException。您需要将它们放在try-catch块中。此外,重构您的代码。如果在Android Studio中按Ctrl + Alt + L重新排列代码。

答案 1 :(得分:0)

如果str = et1.getText().toString()的结果为空,则调用Double.parseDouble(str)将抛出NumberFormatException。你需要在尝试解析它们之前检查字符串是否为空,或者在try-catch块中包装每个解析调用(无论如何,这是一个好主意,因为如果文本包含无法解析为double的内容会发生什么?< / p>

另外,et1.getText()的返回类型是什么?如果是String,则无需在其上调用toString()。

相关问题