Button Onclicklistener tötet meine APp

  • Antworten:28
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 14

14.05.2014, 18:28:30 via Website

Hey leute die Überschrfit klingt zwar komisch aber es ist echt so : sobald ich den button1 mit einem listener verbinde stürzt die app sofort beim Start.. alles andere im Code ist ok --> führt also zu keinen Komplikationen ausser der Button
Woran liegt das ich teste es jetzt seit 2 stunden bin am verzweifeln ..

import android.app.AlertDialog;

import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    ActionBar actionBar = getSupportActionBar();
    actionBar.hide();
 Button button1 = (Button) findViewById(R.id.button1);
 button1.setOnClickListener(new Button.OnClickListener() {
       @Override public void onClick(View v) {
     AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(MainActivity.this);

     dlgAlert.setMessage("wrong password or username");
     dlgAlert.setTitle("Error Message...");

     dlgAlert.setCancelable(true);
     dlgAlert.create().show();




        }
    });

ich möchte doch nur, dass wenn auf den button geklickt wird eine messagebox( allertdialog) erscheint
Ist das zu schwer oder was ? :) Sorry bin echt fertig von dem Problem, komme einfach nicht dahinter

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

14.05.2014, 19:41:12 via Website

Was sagt denn LogCat dazu?
und man benutzt das so nicht:
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(MainActivity.this);

sondern

AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);

nur this für die Aktuelle klasse

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 1.793

14.05.2014, 21:51:55 via App

Pascal P.

und man benutzt das so nicht:
AlertDialog.Builder dlgAlert = new AlertDialog.Builder(MainActivity.this);

sondern

AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);

nur this für die Aktuelle klasse

MainActivity. this wird benötigt. Ohne das, bezieht sich this auf die aktuelle Klasse, was in diesem Fall der OnClickListener ist.

— geändert am 14.05.2014, 21:52:07

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

max petersen

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

15.05.2014, 06:58:49 via App

Oh sorry das hatte ich übersehen. Das das im onClck listener dann anders ist.
Ich lagere sowas immer in funktionen aus.

LG Pascal //It's not a bug, it's a feature. :) ;)

impjorFabian Simon

Antworten
  • Forum-Beiträge: 756

15.05.2014, 19:25:44 via App

Poste mal den LogCat Fehler - verwendest du den Button sonst noch irgendwo?

Antworten
  • Forum-Beiträge: 6

15.05.2014, 21:27:55 via Website

Änder mal

button1.setOnClickListener(new Button.OnClickListener() {

um in

button1.setOnClickListener(new View.OnClickListener() {

Antworten
  • Forum-Beiträge: 1.904

15.05.2014, 21:59:35 via App

LogCat wäre wirklich hilfreich. :)

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
  • Forum-Beiträge: 14

16.05.2014, 10:11:51 via Website

hoffe ihr könnt damit was anfangen.. sorry für die späte Antwort

05-16 08:10:08.465: E/AndroidRuntime(278): FATAL EXCEPTION: main

05-16 08:10:08.465: E/AndroidRuntime(278): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.eeasy/com.example.eeasy.MainActivity}: java.lang.NullPointerException
05-16 08:10:08.465: E/AndroidRuntime(278): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.os.Looper.loop(Looper.java:123)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-16 08:10:08.465: E/AndroidRuntime(278): at java.lang.reflect.Method.invokeNative(Native Method)
05-16 08:10:08.465: E/AndroidRuntime(278): at java.lang.reflect.Method.invoke(Method.java:521)
05-16 08:10:08.465: E/AndroidRuntime(278): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-16 08:10:08.465: E/AndroidRuntime(278): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-16 08:10:08.465: E/AndroidRuntime(278): at dalvik.system.NativeStart.main(Native Method)
05-16 08:10:08.465: E/AndroidRuntime(278): Caused by: java.lang.NullPointerException
05-16 08:10:08.465: E/AndroidRuntime(278): at com.example.eeasy.MainActivity.onCreate(MainActivity.java:26)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-16 08:10:08.465: E/AndroidRuntime(278): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-16 08:10:08.465: E/AndroidRuntime(278): ... 11 more

Antworten
  • Forum-Beiträge: 14

16.05.2014, 10:13:24 via Website

also trotz des Änderns in View.Onclicklistener stürzt es beim Start ab

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

16.05.2014, 10:19:38 via Website

Was steht denn da?
at com.example.eeasy.MainActivity.onCreate(MainActivity.java:26)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 14

16.05.2014, 10:59:34 via Website

da steht das hier : button1.setOnClickListener(new View.OnClickListener() {

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

16.05.2014, 11:09:25 via Website

Im Internet findet man das:

Button clickButton = findViewById(R.id.clickButton);

clickButton.setOnClickListener( new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            ***Do what you want with the click here***
        }
    });

Da darfst du die Imports nicht vergessen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 14

16.05.2014, 11:34:22 via Website

wie meinst du die importe nicht vergessen eclipse weisst einen doch dann darauf hin wenn man die vergisst, oder ?
der code sieht jetzt so aus und stürzt immer noch beim öffnen ab:

package com.example.eeasy;

import android.app.AlertDialog;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    ActionBar actionBar = getSupportActionBar();
    actionBar.hide();
 Button button1 = (Button) findViewById(R.id.button1);

 button1.setOnClickListener( new OnClickListener() {

        @Override 
        public void onClick(View v) {
            // TODO Auto-generated method stub
            AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(MainActivity.this);

     dlgAlert.setMessage("wrong password or username");
     dlgAlert.setTitle("Error Message...");

     dlgAlert.setCancelable(true);
     dlgAlert.create().show();  
        }
    });




    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
    }
}

}

LOGCAT :

05-16 09:35:54.845: E/AndroidRuntime(334): FATAL EXCEPTION: main

05-16 09:35:54.845: E/AndroidRuntime(334): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.eeasy/com.example.eeasy.MainActivity}: java.lang.NullPointerException
05-16 09:35:54.845: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.os.Looper.loop(Looper.java:123)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-16 09:35:54.845: E/AndroidRuntime(334): at java.lang.reflect.Method.invokeNative(Native Method)
05-16 09:35:54.845: E/AndroidRuntime(334): at java.lang.reflect.Method.invoke(Method.java:521)
05-16 09:35:54.845: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-16 09:35:54.845: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-16 09:35:54.845: E/AndroidRuntime(334): at dalvik.system.NativeStart.main(Native Method)
05-16 09:35:54.845: E/AndroidRuntime(334): Caused by: java.lang.NullPointerException
05-16 09:35:54.845: E/AndroidRuntime(334): at com.example.eeasy.MainActivity.onCreate(MainActivity.java:27)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-16 09:35:54.845: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-16 09:35:54.845: E/AndroidRuntime(334): ... 11 more

— geändert am 16.05.2014, 11:38:07

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

16.05.2014, 19:17:53 via Website

Doch es ist eine NullPointer Exception, also wird der Button nicht gefunden.
Befindet sich dieser Button auf dem Layout der activity_main.xml?
oder befindet sich dieser auf einem Fragment, wenn ja dann musst du den Listener auch in die jeweilige Fragment Klasse machen.

LG Pascal //It's not a bug, it's a feature. :) ;)

max petersen

Antworten
  • Forum-Beiträge: 14

16.05.2014, 19:28:04 via Website

du hast es pascal- das muss der fehler sein
ich bin beginner wie mach ich denn jetzt den Listener in die Fragment Klasse ?
Und kannst du mir auch noch sagen wieso es überhaupt diese Fragment Klasse gibt , was der Sinn von dieser Aufteilung ist :)
Endlich man danke, das muss der Fehler sein

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

16.05.2014, 20:02:53 via Website

Einfach den Listener mit dem Button findViewById etc in die Andere klasse verschieben. Und zwar in die OnCreateView Funktion.
Hier was zu den Fragments: http://www.stuermer-benjamin.de/v12_1/android-in-4-schritten-zu-fragments/

Die sind dafür, wenn du Layouts nebeneinander anordenen willst und den Code der einzelenen in eine ándere Klasse auslagen willst.
in deinem Falle brauchst du das eigentlich nicht, aber lass es drin, Fragments sind das Zukünfitge Layout, d.h. es soll verstärkt damit gearbeitet werden (von Google so gewollt):

LG Pascal //It's not a bug, it's a feature. :) ;)

max petersen

Antworten
  • Forum-Beiträge: 14

16.05.2014, 20:31:50 via Website

also ich kriege dann wieder Fehler, das regt mich langsam echt auf :/ Ich krieg das nicht einmal hin... so sieht die oncreateview methode aus

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
        Button button1 = (Button) findViewById(R.id.button1);

         button1.setOnClickListener( new OnClickListener() {

                @Override 
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(MainActivity.this));

             dlgAlert.setMessage("wrong password or username");
             dlgAlert.setTitle("Error Message...");

             dlgAlert.setCancelable(true);
             dlgAlert.create().show();  
                }
            });

bei findviewbyid krieg ich die Meldung, Cannot make a static reference to the non-static method Findviewbyid from the type activity
bei alertdialog.Builder krieg ich no enclosing instance of the type MainActivity is accesible in scope

hab schon gegooglet komme aber mit den lösungen nicht zurecht da krieg ich noch mehr fehler..

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

16.05.2014, 20:38:06 via Website

Ja, ein bisschen mitdenken musst du acuch nicht einfach nur Copy&Paste

  1. Du kannst keinen Code nach einem Return Statement schreiben, deswegen verschiebe dies ans ende des codes vor den schließenden Klammer.

  2. du musst nun das Layout angeben auf dem sich der Button befindet.
    Bei dir sieht das so aus: rootView.findViewById(R.id.bla);

Den AlertDialog Context musst du dann auch entsprechend verändern.

LG Pascal //It's not a bug, it's a feature. :) ;)

max petersen

Antworten

Empfohlene Artikel