2017-06-17 1 views
0

Voici le code ... chaque fois que je lance l'application sur mon téléphone, il se bloque. Je suis nouveau à la programmation Android alors s'il vous plaît aidez-moi. Après avoir fait quelques tests, il ressort que le problème est lorsque je asssign la valeur à Value1 et Value2 (juste une supposition). aidez-moi s'il vous plaît ici. Merci d'avance. MainActivity.javaPourquoi mon application se bloque-t-elle lors de la mise en place du bouton?

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


      } 

     }); 
    } 

} 

et 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

Partager journal des erreurs. –

+0

S'il vous plaît partager votre journal – Anil

Répondre

0

Logic est: obtenir la valeur d'édition de texte, cliquez auditeur Button

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

En utilisant OnClickListeners pour bouton est déconseillée. Il a été remplacé par l'attribut XML: android:onClick = "functionName".

Cette fonction doit être implémentée dans l'activité à laquelle le fichier de mise en page est attaché. Par conséquent, dans MainActivity.java:

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

0

Il peut y avoir un certain nombre d'erreurs de conversion de chaîne

Value1 = 0; 

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

Vous obtenez la valeur avant d'insérer, vous devez obtenir la valeur lorsque l'utilisateur clique sur le bouton Ajouter et obtenir valeur1 et valeur2 l'intérieur onClickListner

changement selon cette

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

Ne pas simplement jeter le code: expliquer le problème, expliquer le changement. –

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

ce code écrivent en onClick() méthode.remove de onCreate() méthode.

+0

Merci, cela a fonctionné –

+0

S'il vous plaît voter et marquer comme réponse. @VishalSingh –

0

Votre application se bloque à cause de ces deux lignes

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

ici que vous essayez de convertir la chaîne en entier ou chaîne est null si editText n'a pas de valeur de fourmis ce type d'erreur se produit pendant le typeCast, donc ajoutez la validation avant le typeCasting comme ci-dessous

@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

Modifiez votre code pour cela et il devrait fonctionner. Le problème est que vous accédez aux valeurs dans EditText trop tôt, avant même que vous en tapiez. Vous avez besoin d'accéder à ces valeurs onClick() de votre bouton 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); 

      } 

     }); 
    } 

}