2017-12-31 126 views
-2

Ich lerne Android. Jedes Mal, wenn ich die App starte, stürzt es ab. Ich kann keinen Fehler finden. Hilfe benötigt.App stürzt

Hier ist der Hauptcode.

MainActivity.java

package com.example.arnab.myfirstapplication; 

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

public class MainActivity extends Activity implements View.OnClickListener { 

    Button btnAdd = (Button)findViewById(R.id.btnAdd); 
    EditText num1 = (EditText)findViewById(R.id.num1); 
    EditText num2 = (EditText)findViewById(R.id.num2); 
    TextView result = (TextView)findViewById(R.id.result); 

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

     btnAdd.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     if(v == btnAdd){ 
      int n1 = Integer.parseInt(num1.getText().toString()); 
      int n2 = Integer.parseInt(num2.getText().toString()); 
      int sum = n1 + n2; 
      result.setText(Integer.toString(sum)); 
     } 
    } 

    @Override 
    public void onPointerCaptureChanged(boolean hasCapture) { 

    } 
} 

Bitte helfen wird sehr geschätzt. Ich stecke in dieser Phase fest. Egal was ich mache, die App stürzt ab.

aktualisieren Ich wusste nicht, dass es nicht möglich ist findViewById vor setcontentview zu verwenden. Zu dieser Zeit war meine Logik nicht klar. Tut mir leid.

+5

Sie nicht 'findViewById' verwenden kann, bevor Sie den Inhalt anzeigen gesetzt haben. Verschieben Sie also Ihre Subview-Initialisierungen in die onCreate-Methode. – Henry

+0

Danke @Henry. Problem gelöst. Verstanden meinen Fehler. – Arnab

+0

Danke @BilltheLizard. Problem gelöst – Arnab

Antwort

1

Sie können findViewById oder eine andere Methode außerhalb des Methodenblocks nicht aufrufen.

btnAdd = (Button)findViewById(R.id.btnAdd); 
num1 = (EditText)findViewById(R.id.num1); 
num2 = (EditText)findViewById(R.id.num2); 
result = (TextView)findViewById(R.id.result); 

diesen Code nach setContentView in onCreate hinzufügen und alle Initialisierung von oben entfernen.

+0

Danke für die Hilfe. – Arnab

1

Versuchen Sie, diese

package com.example.arnab.myfirstapplication; 

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

public class MainActivity extends Activity implements View.OnClickListener 
{ 



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

Button btnAdd = (Button)findViewById(R.id.btnAdd); 
EditText num1 = (EditText)findViewById(R.id.num1); 
EditText num2 = (EditText)findViewById(R.id.num2); 
TextView result = (TextView)findViewById(R.id.result); 

    btnAdd.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    if(v == btnAdd){ 
     int n1 = Integer.parseInt(num1.getText().toString()); 
     int n2 = Integer.parseInt(num2.getText().toString()); 
     int sum = n1 + n2; 
     result.setText(Integer.toString(sum)); 
    } 
} 

@Override 
public void onPointerCaptureChanged(boolean hasCapture) { 

} 
} 
+0

Danke für die Antwort. @Syed Hamza Hassan – Arnab