2017-06-17 81 views
0

這裏是代碼...每當我在手機上啓動應用程序,它只是崩潰。我是新來的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

回答

0

邏輯是:在按鈕

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


     } 

    }); 
0

使用的按鈕OnClickListeners氣餒。它已被替換爲XML屬性:android:onClick = "functionName"

此功能將在佈局文件附加到的活動中執行。因此,在MainActivity.java

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

0

可能有若干字符串轉換錯誤的

Value1 = 0; 

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

它插入之前,你得到的價值,你必須得到的值時,添加按鈕的用戶點擊根據該

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

不要只是轉儲代碼:解釋問題,解釋改變。 –

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

該代碼寫入onClick() method.remove from onCreate() method。

+0

謝謝,它已工作 –

+0

請投票並標記爲答案。 @VishalSingh –

0

您的應用,因爲這兩條線

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


      } 

     }); 
    } 
1

編輯你的代碼到這個,它應該運行。問題在於,您在訪問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); 

      } 

     }); 
    } 

} 
相關問題