为什么我的应用程序在执行按钮时崩溃?

问题描述:

这里是代码...每当我在手机上启动应用程序,它只是崩溃。我是新来的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> 
+1

分享错误日志。 –

+0

请分享您的日志 – Anil

逻辑是:在按钮

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());  
    } 


     } 

    }); 

使用的按钮OnClickListeners气馁。它已被替换为XML属性:android:onClick = "functionName"

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

public void funcitonName(View v){ // your code here }

可能有若干字符串转换错误的

Value1 = 0; 

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

它插入之前,你得到的价值,你必须得到的值时,添加按钮的用户点击根据该

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); 


     } 

    }); 
    } 
} 
获取值1和值2内 onClickListner

变化

+1

不要只是转储代码:解释问题,解释改变。 –

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

该代码写入onClick() method.remove from onCreate() method。

+0

谢谢,它已工作 –

+0

请投票并标记为答案。 @VishalSingh –

您的应用,因为这两条线

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

这里您尝试将字符串转换为整数,其中串的崩溃的点击收听得到编辑的文本价值如果editText没有ant值,则为null如果在typeCasting中发生这些类型的错误,请在typeCasting之前添加验证,如下所示

@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的值时太早,即使在输入任何值之前也是如此。您需要访问onClick()中的这些值add按钮

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); 

      } 

     }); 
    } 

}