Android onClick führt zu Absturz

mlkike

Mitglied
Liebe Community,

ich versuche mich zurzeit an meiner ersten App für Android 5 und bin gleich mal auf ein Problem gestoßen, dessen Ursache mir nicht ganz schlüssig ist.

Ich habe eine MainActivity, mit mehreren Buttons, einer davon startet eine zweite Activity.

Die zweite Activity hat nur einen Button, versehen mit einem OnClickListener.

Die App stürzt ab, sobald ich die zweite Activity starten möchte.
Wenn ich dem Button keinen Listener hinzufüge, startet die zweite Activity ohne Probleme.

Hier mein gesamter Code der zweiten Activity:

Java:
package com.mike.guthabencheck;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class AddBuchungActivity extends Activity implements View.OnClickListener {

    private EditText betragfield;
    private EditText grund;

    private String grundstring;

    private float input;

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

        Button addbuchungbtn = (Button) findViewById(R.id.buchungbtn);
        addbuchungbtn.setOnClickListener(this);

        betragfield = (EditText) findViewById(R.id.EditTextBuchung);
        grund = (EditText) findViewById(R.id.editTextGrund);

        /*addbuchungbtn.setOnClickListener(new View.OnClickListener() { // CRASHES APP
            @Override
            public void onClick(View v) {

                Toast.makeText(getApplication(), "Clicked :-)", Toast.LENGTH_SHORT).show();

                try {

                    input = Float.parseFloat(betragfield.getText().toString());
                    grundstring = grund.getText().toString();

                    //TODO Add wert to Guthaben
                    //TODO Save Grund to txt

                } catch (NumberFormatException e) {

                    Toast.makeText(getApplication(), "Nur Zahlen erlaubt!", Toast.LENGTH_SHORT).show();
                } catch (NullPointerException e) {

                    Toast.makeText(getApplication(), "Leeres Feld!", Toast.LENGTH_SHORT).show();
                }


            }
        });*/
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.buchungbtn:
                addNewBuchung(); // CRASHES APP
                break;
        }


    }

    private void addNewBuchung() {

        Toast.makeText(getApplication(), "Button clicked! :-)", Toast.LENGTH_SHORT).show();

    }
}
 
Zuletzt bearbeitet:

Maggot

Bekanntes Mitglied
Also erstellst du die APK am PC und spielst sie dann auf das Handy rauf? So brauchst du ja ewig mit dem Entwickeln.

Warum geht die ADB Verbindung nicht?

Und probier mal folgendes:

Java:
packagecom.mike.guthabencheck;

importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.Toast;


publicclass AddBuchungActivity extends Activity implements[URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+view']View[/URL].OnClickListener{

   private EditText betragfield;
   private EditText grund;
   private [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+button']Button[/URL] addbuchungbtn;

   private [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] grundstring;

   private float input;

    [USER=48687]@Override[/USER]
   protectedvoid onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_buchung);

        betragfield =(EditText) findViewById(R.id.EditTextBuchung);
        grund =(EditText) findViewById(R.id.editTextGrund);

       addbuchungbtn =([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+button']Button[/URL]) findViewById(R.id.buchungbtn);
       addbuchungbtn.setOnClickListener(new View.OnClickListener() { // CRASHES APP
          [USER=48687]@Override[/USER]
          public void onClick(View v) {
              Toast.makeText(getApplication(), "Clicked :)", Toast.LENGTH_SHORT).show();
            }
        });
   }

    [USER=48687]@Override[/USER]
   publicvoid onClick([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+view']View[/URL] v){

       switch(v.getId()){

           case R.id.buchungbtn:
                addNewBuchung();// CRASHES APP
               break;
       }


   }

   private void addNewBuchung(){

        Toast.makeText(getApplication(), "Button clicked! :)", Toast.LENGTH_SHORT).show();

   }
}
 

mlkike

Mitglied
Ja, aktuell muss ich das leider so machen.

Warum das nicht funktioniert, habe ich noch nicht herausgefunden, Samsung USB Driver sind installier, Handy wird erkannt aber in Android Studio ist es nicht zu finden.

Mit dem Code hat es leider auch nicht funktioniert.

Es funktioniert solange der Button keinen Listener hat, sobald ich dem Button einen Listener zuweise, stürzt die App ab, wenn ich die Activity aufrufe.
 

mlkike

Mitglied
Ok ich habs hinbekommen, hier alles ausm LogCat :)

Das ist die Fehlermeldung, wenn ich auf den Button drücke:

Java:
07-20 13:31:12.679  27956-27956/com.mike.guthabencheck E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.mike.guthabencheck, PID: 27956
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mike.guthabencheck/com.mike.guthabencheck.AddBuchungActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2694)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2759)
            at android.app.ActivityThread.access$900(ActivityThread.java:178)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5944)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at com.mike.guthabencheck.AddBuchungActivity.onCreate(AddBuchungActivity.java:30)
            at android.app.Activity.performCreate(Activity.java:6289)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2647)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2759)
            at android.app.ActivityThread.access$900(ActivityThread.java:178)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1449)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5944)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
 

Maggot

Bekanntes Mitglied
Okay. Also:

Wird der Button auch wirklich gefunden mit dem findViewById? Oder gibt er dir einfach Null zurück? Hat der Button eh die Richtige ID? Verwenden eh keine 2 Buttons die gleiche Id?
 

mlkike

Mitglied
Sowas blödes, Tippfehler in der ID...

Naja immerhin funktioniert jetzt die ADB :rolleyes:

Vielen Dank für die Hilfe, nächstes mal les ich alles doppelt!
MFG
 

Neue Themen


Oben