Fehler suche Java.lang.NullPointerException

S

Schütz12

Neues Mitglied
0
Hallo leute

Ich bin recht neu bei diesem Thema und stoße ganze Zeit auf den gleichen Fehler den ich nie beheben konnte.

Hier das Programm:

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends Activity implements OnClickListener {

private Button start;
private Button cancel;
private TextView begin;
private TextView state;

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

start = (Button)findViewById(R.id.startbutton);
cancel = (Button)findViewById(R.id.beendenbutton);

start.setOnClickListener(this);
cancel.setOnClickListener(this);

begin = (TextView)findViewById(R.id.TextView1);
state = (TextView)findViewById(R.id.textstate);

begin.setText("Um zu Beginnen drücke Start");
state.setText("Zustand : STOPP");

}

public void onClick(View v)
{
if(v==start)
{
setContentView(R.layout.wischen);
return;
}
else if(v==cancel)
{
setContentView(R.layout.activity_main);
return;
}
}


@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;
}

}


Wo könnte da der Fehler sein?
Falls ihr noch zusätzliche Informationen benötigt schreibt es einfach, ich will diese App unbedingt zum laufen bekommen
 
Hallo,

Schreibe anstatt v==start, v.getId() == start.
 
Danke einmal für deine Antwort!

Ich habe es so geschrieben wie du es mir geschrieben hast, leider kommt da ein Fehler auf : "Incompatible operand typs int and Button".

Was muss ich dann verändern?
 
Sorry hab ich vergessen. Schreibe anstatt start einfach R.id.startbutton
 
@Christian:
Was soll dein Tipp bringen!? Nichts! Wenn es daran liegen würde, wäre jeder deiner Vorschläge auch ein Nullpointer!

@Schütz12:
Wann tritt denn die Exception auf? Beim Click auf einen der Buttons oder schon direkt beim Start?


Meine Vermutung liegt eher, dass dein setContentView() zu Problemen führt.
 
Zuletzt bearbeitet:
Existiert eine XML mit dem Namen "activity_main.xml"?
Existieren darin die gewünschten zwei Buttons + zwei Textfelder? (@+id/....)
Existiert eine "main.xml" im Menü-Layout-Ordner?


Man kann dir besser helfen, wenn du die Logcat-Fehlermeldung hier reinkopierst :) Da kann man (du selbst natürlich auch ;)) den Fehler etwas besser eingrenzen, wenn nicht sogar explizit benennen ;)
 
Im Anhang die Fehlermeldung
 

Anhänge

  • eclipse.JPG
    eclipse.JPG
    137,9 KB · Aufrufe: 380
MainActivity Zeile 28?

begin = (TextView)findViewById(R.id.TextView1);?

In der XML wirklich vorhanden und exakt so geschrieben?
 
Ja in der XML datei ist sie enthalten und auch so benannt.
 
Kopier den XML-Inhalt hier mal rein bitte.

Nochmal die Frage: Ist das Zeile 28? (wenn ich package + eine Leerzeile dazunehme, ist Zeile 28 nämlich was anderes ... und ich zähl das jetzt nicht andauernd für dich nach ;))

Vor/über Onclick: @Override mal noch hinzufügen ...
 
Zuletzt bearbeitet:
Ich verwende 2 XML dateien:

Activitiy main XML Datei:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:background="#000000" >

<TextView
android:id="@+id/TextView1"
android:layout_width="300dp"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="45dp"
android:ems="10"
android:text="@string/textviewtext"
android:textColor="#ffffff" />

<Button
android:id="@+id/startbutton"
android:layout_width="90dp"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/startbutton" />

</RelativeLayout>

die ander XML Datei (wischen.XML):


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/steuerkreuz"
android:orientation="vertical"
android:paddingTop="20dp" >

<TextView
android:id="@+id/textstate"
android:layout_width="match_parent"
android:layout_height="30dp"
android:ems="10"
android:text="@string/state" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<Button
android:id="@+id/beendenbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/beendenbutton" />
</LinearLayout>

</LinearLayout>
 
Code:
cancel = (Button)findViewById(R.id.beendenbutton);

Hier wird findViewById null zurückgeben. Du kannst die Methode nur für Views brauchen, die sich im aktuellen Layout (setContentView) befinden
 
Vielen dank, endlich funktioniert es!
 
Meine Vermutung der Fehler ist hier:
cancel.setOnClickListener(this);
Warum?
Weil ich vermute cancel ist im R.layout.wischen definiert.
Du lädst aber R.layout.activity_main dieses enthält wahrscheinlich KEINEN Cancel Button.

cancel = (Button)findViewById(R.id.beendenbutton);
findet nur aktuell gelandene Views, wenn du R.layout.activity_main geladen hastaber der Button im wischen layout liegt gibt das ganze null zurück.

Ich weiß aber immer noch nicht wo sich das alle abgeguckt haben die gesamte ContentView zu ändern in einer Activity.
Eigentlich macht man dafür ne 2. Acitivity.

Jedesmal wenn setContentView aufgerufen wird, gehen alle vorhanden Views die du mit findViewById gespeichert hast verloren.
 
Was wäre eine Lösung damit ich nicht immer die Views für die Contents definieren muss?
 
Ich hatte die 2. seite gar nicht geehen :D
Eine bessere Lösung wäre meiner Meinung nach die 2. contentview in ihre eigene Activity zu packen.
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.050
swa00
swa00
D
Antworten
3
Aufrufe
487
jogimuc
J
M
Antworten
1
Aufrufe
1.059
wilco
W
Zurück
Oben Unten