android.view.View$OnClickListener on a null object reference

  • Antworten:4
  • Bentwortet
Rene Re
  • Forum-Beiträge: 64

08.12.2017, 15:12:19 via Website

Hey Leute, jetzt muss ich doch mal um Hilfe bitten.

Aber eins noch vorweg:
Zerreißt mich jetzt bitte nicht wegen meiner Frage :(
(Ich habe lange selber nach einer Lösung gesucht, jedoch stehe ich voll auf dem Schlauch :,( - und......als Laie verliere ich denn doch bald die Geduld :/ )

Wie im Titel erwähnt, bekomme ich eine Fehlermeldung, welche wie folgt aussieht:

FATAL EXCEPTION: main
                                                                        Process: de.testprojekt.testprojekt, PID: 15807
                                                                        java.lang.RuntimeException: Unable to start activity ComponentInfo{de.testprojekt.testprojekt/de.testprojekt.testprojekt.MainActivity}: 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:2927)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
                                                                            at android.app.ActivityThread.-wrap14(ActivityThread.java)
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                            at android.os.Looper.loop(Looper.java:154)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6682)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
                                                                         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 de.testprojekt.testprojekt.MainActivity.onCreate(MainActivity.java:48)
                                                                            at android.app.Activity.performCreate(Activity.java:6942)
                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2880)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) 
                                                                            at android.app.ActivityThread.-wrap14(ActivityThread.java) 
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                            at android.os.Looper.loop(Looper.java:154) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6682) 
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 

Der Fehler entsteht - wenn ich dass richtig sehe - in der Main, richtig?

Die MainActivity sieht wie folgt aus:

package de.testprojekt.testprojekt;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {

private FangbuchOpenHandler openHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
        this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);








 final Button v_button_gut = findViewById(R.id.button_gut);
 v_button_gut.setOnClickListener((e) -> ButtonClicked(FangbuchOpenHandler.MOOD_GUT));

 final Button v_button_mittel = findViewById(R.id.button_mittel);
 v_button_mittel.setOnClickListener((e) -> ButtonClicked(FangbuchOpenHandler.MOOD_MITTEL));

 final Button v_button_schlecht = findViewById(R.id.button_schlecht);
 v_button_schlecht.setOnClickListener((e) -> ButtonClicked(FangbuchOpenHandler.MOOD_SCHLECHT));

 openHandler = new FangbuchOpenHandler(this);

}






@Override
public void onBackPressed() {
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

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

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        startActivity(new Intent(this, ActivitySettings.class));
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.btn_1) {

    } else if (id == R.id.btn_2) {

    } else if (id == R.id.btn_3) {

    } else if (id == R.id.btn_4) {

    } else if (id == R.id.btn_5) {

    } else if (id == R.id.btn_6) {

    } else if (id == R.id.btn_7) {

    } else if (id == R.id.btn_8) {

    } else if (id == R.id.btn_fangbuch) {
        startActivity(new Intent(this, ActivityFangbuch.class));

    } else if (id == R.id.btn_settings) {

    } else if (id == R.id.btn_quit) {
        System.exit(0);

    }

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}



@Override
protected void onPause() {
    super.onPause();
    openHandler.close();
}

private void ButtonClicked (int mood){
 openHandler.insert(mood, System.currentTimeMillis());
    Toast.makeText(this, "GESPEICHERT!", Toast.LENGTH_SHORT).show();
}

}

Das Problem taucht erst jetzt auf, nachdem ich die Buttons

click_1, click_2 und click_3 einfügen will.

Vorher lief alles (bis dato ohne Probleme), und jetzt meckert AndroidStudio wegen dem Listener. Ich raffe dass gerade nicht und würde mich freuen wenn mir jemand - OHNE DEN KOPF ABZUREIßEN ;) - bei der Lösung hilft.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.12.2017, 15:19:33 via App

Was ist denn Zeile 48 in der MainActivity?
Da tritt der Fehler auf.

Und scheint so als würde einer der Buttons auf dem Layout nicht gefunden werden.

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

Antworten
Rene Re
  • Forum-Beiträge: 64

08.12.2017, 15:31:26 via Website

Besten Dank, Layout war das Stichwort. Habe alles in der Main stehen gehabt, aber das Layout auf welchem die Buttons sind, ist ein anderes. Also Code in die andere Activity geschoben, und nun läuft es.

Man man man, darauf wäre ICH nie gekommen,.........................naja vllt irgendwann mal, aber nicht jetzt :D

Vielen vielen Dank :)

Pascal P.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.12.2017, 15:39:45 via App

Hallo Rene!
Wenn deine Frage geklärt ist, setze doch bitte noch deinen Thread auf "Beantwortet"!

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

Antworten
Rene Re
  • Forum-Beiträge: 64

08.12.2017, 16:27:25 via Website

Habe ich gemacht - glaube ich ^^ - Habe zumindest draufgeklickt, aber sehe keine Veränderung.

Frage ist geklärt, Problem behoben :)

Pascal P.

Antworten