Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的应用程序在实现按钮时崩溃?_Java_Android_Crash - Fatal编程技术网

Java 为什么我的应用程序在实现按钮时崩溃?

Java 为什么我的应用程序在实现按钮时崩溃?,java,android,crash,Java,Android,Crash,下面是代码…每当我在手机上启动应用程序时,它就会崩溃。我是android编程新手,所以请帮助我。在做了一些测试之后,问题是当我将值分配给Value1和Value2时(只是一个猜测)。请帮帮我。提前谢谢。 MainActivity.java package com.example.android.add; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.

下面是代码…每当我在手机上启动应用程序时,它就会崩溃。我是android编程新手,所以请帮助我。在做了一些测试之后,问题是当我将值分配给Value1和Value2时(只是一个猜测)。请帮帮我。提前谢谢。 MainActivity.java

package com.example.android.add;


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

public class MainActivity extends AppCompatActivity {

    EditText num1;
    EditText num2;
    Button add;
    TextView ans;
    int Value1;
    int Value2;
    int result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        num1 = (EditText) findViewById(R.id.et1);
        num2 = (EditText) findViewById(R.id.et2);
        Value1 = Integer.parseInt(num1.getText().toString());
        Value2 = Integer.parseInt(num2.getText().toString());
        add = (Button) findViewById(R.id.addBtn);
        ans = (TextView) findViewById(R.id.tv);

        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                result = Value1 + Value2;

                ans.setText(""+result);


            }

        });
    }

} 
以及activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.android.add.MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:hint="Number 1"
        android:textSize="40dp"
        android:id="@+id/et1"
        android:inputType="number"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:layout_below="@+id/et1"
        android:hint="Number 2"
        android:textSize="40dp"
        android:id="@+id/et2"
        android:inputType="number"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/addBtn"
        android:layout_below="@+id/et2"
        android:text="Add"
        android:layout_marginLeft="80dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Your Answer"
        android:textSize="40dp"
        android:layout_margin="40dp"
        android:layout_below="@+id/addBtn"
        android:id="@+id/tv"/>

</RelativeLayout>

不鼓励对按钮使用OnClickListeners。它已替换为XML属性:
android:onClick=“functionName”

此功能将在布局文件附加到的活动中实现。因此,在
MainActivity.java
中:

公共作废功能名(视图v){
//你的代码在这里

}

不鼓励对按钮使用OnClickListeners。它已替换为XML属性:
android:onClick=“functionName”

此功能将在布局文件附加到的活动中实现。因此,在
MainActivity.java
中:

公共作废功能名(视图v){
//你的代码在这里

}

可能存在多个字符串转换错误

Value1 = 0;

try {
    Value1 = Integer.parseInt(num1.getText().toString());
} catch(NumberFormatException nfe) {
   System.out.println("Could not parse " + nfe);
} 

可能存在多个字符串转换错误

Value1 = 0;

try {
    Value1 = Integer.parseInt(num1.getText().toString());
} catch(NumberFormatException nfe) {
   System.out.println("Could not parse " + nfe);
} 

在插入值之前,必须先获取值,然后用户单击“添加”按钮,在
onClickListner中获取值1和值2

照此改变

package com.example.android.add;


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

public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
Button add;
TextView ans;
int Value1;
int Value2;
int result;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    num1 = (EditText) findViewById(R.id.et1);
    num2 = (EditText) findViewById(R.id.et2);

    add = (Button) findViewById(R.id.addBtn);
    ans = (TextView) findViewById(R.id.tv);

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

            Value1 = Integer.parseInt(num1.getText().toString());
            Value2 = Integer.parseInt(num2.getText().toString());

            result = Value1 + Value2;

            ans.setText(""+result);


        }

    });
   }
 }

在插入值之前,必须先获取值,然后用户单击“添加”按钮,在
onClickListner中获取值1和值2

照此改变

package com.example.android.add;


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

public class MainActivity extends AppCompatActivity {
EditText num1;
EditText num2;
Button add;
TextView ans;
int Value1;
int Value2;
int result;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    num1 = (EditText) findViewById(R.id.et1);
    num2 = (EditText) findViewById(R.id.et2);

    add = (Button) findViewById(R.id.addBtn);
    ans = (TextView) findViewById(R.id.tv);

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

            Value1 = Integer.parseInt(num1.getText().toString());
            Value2 = Integer.parseInt(num2.getText().toString());

            result = Value1 + Value2;

            ans.setText(""+result);


        }

    });
   }
 }
此代码写入
onClick()
方法。从
onCreate()
方法中删除


此代码写入
onClick()
方法。从
onCreate()
方法中删除。

逻辑是:单击按钮获取编辑文本值

 add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         try{
        Value1 = Integer.parseInt(num1.getText().toString());
        Value2 = Integer.parseInt(num2.getText().toString());
        result = Value1 + Value2;
            result = Value1 + Value2;

            ans.setText(""+result);
        }
     catch(Exception e)
     {
           Log.e("Exc",e.toString());      
     }


        }

    });

逻辑是:在单击按钮的侦听器时获取编辑文本值

 add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         try{
        Value1 = Integer.parseInt(num1.getText().toString());
        Value2 = Integer.parseInt(num2.getText().toString());
        result = Value1 + Value2;
            result = Value1 + Value2;

            ans.setText(""+result);
        }
     catch(Exception e)
     {
           Log.e("Exc",e.toString());      
     }


        }

    });

由于这两行代码,您的应用程序正在崩溃

Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
在这里,您试图将字符串转换为整数,如果editText没有ant值,则字符串为null。这些类型的错误在类型转换时发生,因此在类型转换之前添加验证,如下所示

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        num1 = (EditText) findViewById(R.id.et1);
        num2 = (EditText) findViewById(R.id.et2);
        add = (Button) findViewById(R.id.addBtn);
        ans = (TextView) findViewById(R.id.tv);

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

                if(num1.getText() != null && num2.getText() != null) {
                    Value1 = Integer.parseInt(num1.getText().toString());
                    Value2 = Integer.parseInt(num2.getText().toString());
                    result = Value1 + Value2;

                    ans.setText("" + result);
                }


            }

        });
    }

由于这两行代码,您的应用程序正在崩溃

Value1 = Integer.parseInt(num1.getText().toString());
Value2 = Integer.parseInt(num2.getText().toString());
在这里,您试图将字符串转换为整数,如果editText没有ant值,则字符串为null。这些类型的错误在类型转换时发生,因此在类型转换之前添加验证,如下所示

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        num1 = (EditText) findViewById(R.id.et1);
        num2 = (EditText) findViewById(R.id.et2);
        add = (Button) findViewById(R.id.addBtn);
        ans = (TextView) findViewById(R.id.tv);

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

                if(num1.getText() != null && num2.getText() != null) {
                    Value1 = Integer.parseInt(num1.getText().toString());
                    Value2 = Integer.parseInt(num2.getText().toString());
                    result = Value1 + Value2;

                    ans.setText("" + result);
                }


            }

        });
    }

将您的代码编辑到此位置,它将运行。问题是您访问
EditText
s中的值太早,甚至在您键入任何值之前。您需要在
add
按钮的
onClick()
中访问这些值

package com.example.android.add;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    EditText num1;
    EditText num2;
    Button add;
    TextView ans;
    int Value1;
    int Value2;
    int result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        num1 = (EditText) findViewById(R.id.et1);
        num2 = (EditText) findViewById(R.id.et2);

        // If you get value from edit texts here it will cause an error 
        // since onCreate is called at the very beginning and you have not 
        // entered any value in num1 and num2.

        add = (Button) findViewById(R.id.addBtn);
        ans = (TextView) findViewById(R.id.tv);

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

            // Instead put them here so you have already inserted values 
            // into the fields before they are retrieved:

            Value1 = Integer.parseInt(num1.getText().toString());
            Value2 = Integer.parseInt(num2.getText().toString());

            result = Value1 + Value2;

            ans.setText(""+result);

            }

        });
    }

} 

将您的代码编辑到此位置,它将运行。问题是您访问
EditText
s中的值太早,甚至在您键入任何值之前。您需要在
add
按钮的
onClick()
中访问这些值

package com.example.android.add;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    EditText num1;
    EditText num2;
    Button add;
    TextView ans;
    int Value1;
    int Value2;
    int result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        num1 = (EditText) findViewById(R.id.et1);
        num2 = (EditText) findViewById(R.id.et2);

        // If you get value from edit texts here it will cause an error 
        // since onCreate is called at the very beginning and you have not 
        // entered any value in num1 and num2.

        add = (Button) findViewById(R.id.addBtn);
        ans = (TextView) findViewById(R.id.tv);

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

            // Instead put them here so you have already inserted values 
            // into the fields before they are retrieved:

            Value1 = Integer.parseInt(num1.getText().toString());
            Value2 = Integer.parseInt(num2.getText().toString());

            result = Value1 + Value2;

            ans.setText(""+result);

            }

        });
    }

} 

共享错误日志。请共享日志共享错误日志。请共享日志不要只转储代码:解释问题,解释更改。不要只转储代码:解释问题,解释更改。