RuntimeExeption mit NullPointerExeption - ich finde den Fehler nicht

  • Antworten:12
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 236

23.04.2014, 21:28:35 via Website

Guten Abend zusammen,

ich mache zurzeit den Fernlehrgang zum App-Programmierer bei der SGD. Ich komme mit einer Aufgabe absolut nicht weiter, ich sitze schon Stunden und versuche den Fehler zu finden.

Es geht um folgendes: Das Thema lautet Benutzeroberflächen und im Speziellen geht es um den Aufbau eines AbsoluteLayouts. Ich weiß, dass es eigentlich veraltet ist, aber über Sinn und Zweck möchte ich hier nicht diskutieren, denn es macht einen größeren Teil des Lernheftes aus.

Aufgabenstellung: Das Layout soll so aussehen:

image

Damit die Buttons allerdings die gleiche Größe haben, soll diese über die Activity-Klasse abgefragt werden. Die Logging-Ausgaben sollen dann alle den Wert "0" ausgeben. Das ist korrekt, da die Größen der Objekte erst nach Fertigstellung des Layouts feststehen.

Hier der Code:

package android.and04;

import java.util.Vector; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.Button; import android.widget.ImageView;

public class AbsoluteActivity extends Activity {

private Button btLinear, btTable, btRelative, btFrame;
private Vector<Button> buttons = new Vector<Button>();

private ImageView ivLinear, ivTable, ivRelative, ivFrame;
private Vector<ImageView> icons = new Vector<ImageView>();

private static final String TAG = AbsoluteActivity.class.getSimpleName();

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

    // alle Views referenzieren und in zwei Vector-Objekte sortieren:

    btLinear = (Button) this.findViewById(R.id.button5_linearlayout);
    buttons.add(btLinear);
    btTable = (Button) this.findViewById(R.id.button1_tablelayout);
    buttons.add(btTable);
    btRelative = (Button) this.findViewById(R.id.button2_relativeLayout);
    buttons.add(btRelative);
    btFrame = (Button) this.findViewById(R.id.button4_framelayout);
    buttons.add(btFrame);

    ivLinear = (ImageView) this.findViewById(R.id.img_iconL);
    icons.add(ivLinear);
    ivTable = (ImageView) this.findViewById(R.id.img_iconT);
    icons.add(ivTable);
    ivRelative = (ImageView) this.findViewById(R.id.img_iconR);
    icons.add(ivRelative);
    ivFrame = (ImageView) this.findViewById(R.id.img_iconF);
    icons.add(ivFrame);

    this.getSizes();

}

// TODO hier noch Logging ergänzen!

private void getSizes(){

    // Ermittlung der maximalen Button-Breite

    int tempWidth = 0;
    for (Button button : buttons){
        Log.d(TAG, button.getText() + "-Width: " + button.getWidth());
        tempWidth = Math.max(tempWidth, button.getWidth());
    }

    // Ermittlung der Icon-Größe

    Log.d(TAG, "MaxButtonWidth: " + tempWidth);
    int iconWidth = icons.elementAt(0).getWidth();
    int iconHeight = icons.elementAt(0).getHeight();
    Log.d(TAG, "Icon-Size: " + iconWidth + " x " + iconHeight);
}

}

Ich bekomme jedoch eine RuntimeExeption mit NullPointerExeption geworfen und die App stürzt ab:

image

Seltsam ist auch die Meldung, wenn ich mit der Maus im Code über "this" fahre:

image

Sobald ich den selbst geschriebenen Code entferne und lediglich die onCreate-Methode aufrufe, läuft alles. Was mache ich falsch?

Ich hoffe, ihr könnt mir helfen ...

Liebe Grüße, Babette

Antworten
  • Forum-Beiträge: 272

23.04.2014, 21:36:15 via Website

Entferne this überall bei dem Buttons, es ist in der Hauptklasse nicht nötig.

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

23.04.2014, 21:41:47 via Website

Lass dir den Fehler mal in LogCat anzeigen, dort kannst du dann sehen in welcher Zeile der Fehler auftritt.

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

Antworten
  • Forum-Beiträge: 236

24.04.2014, 07:18:16 via Website

Danke, das werde ich mal probieren. Ich komme jedoch leider nicht vor morgen Nachmittag/Abend dazu. Ich melde mich!

Antworten
  • Forum-Beiträge: 236

24.04.2014, 17:59:16 via Website

So, ich habe alle "this" mal gelöscht - und wieder hinzugefügt, jetzt kommt zumindest die kryptische Meldung beim Darüberfahren mit der Maus nicht mehr, sondern es wird ganz normal die Referenz angezeigt.

Ich bekomme zwar immer noch eine RuntimeExeption, allerdings wird im Log anderer Text ausgegeben und es wird im Stack ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2663
angehalten.

Ich komme damit immer noch nicht wirklich klar ...

Hier der Log:

04-24 15:41:37.635: D/AndroidRuntime(423): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<

04-24 15:41:37.635: D/AndroidRuntime(423): CheckJNI is ON 04-24 15:41:37.775: D/AndroidRuntime(423): --- registering native functions --- 04-24 15:41:38.254: D/AndroidRuntime(423): Shutting down VM 04-24 15:41:38.254: D/dalvikvm(423): Debugger has detached; object registry had 1 entries 04-24 15:41:38.275: I/AndroidRuntime(423): NOTE: attach of thread 'Binder Thread #3' failed 04-24 15:41:38.585: D/AndroidRuntime(431): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 04-24 15:41:38.585: D/AndroidRuntime(431): CheckJNI is ON 04-24 15:41:38.725: D/AndroidRuntime(431): --- registering native functions --- 04-24 15:41:39.185: I/ActivityManager(58): Force stopping package android.and04 uid=10037 04-24 15:41:39.185: I/Process(58): Sending signal. PID: 415 SIG: 9 04-24 15:41:39.215: I/UsageStats(58): Unexpected resume of com.android.launcher while already resumed in android.and04 04-24 15:41:39.265: W/InputManagerService(58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@440d3f90 04-24 15:41:39.305: I/ActivityManager(58): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=android.and04/.AbsoluteActivity } 04-24 15:41:39.315: D/AndroidRuntime(431): Shutting down VM 04-24 15:41:39.325: D/jdwp(431): Got wake-up signal, bailing out of select 04-24 15:41:39.325: D/dalvikvm(431): Debugger has detached; object registry had 1 entries 04-24 15:41:39.456: I/ActivityManager(58): Start proc android.and04 for activity android.and04/.AbsoluteActivity: pid=438 uid=10037 gids={} 04-24 15:41:39.695: W/ActivityThread(438): Application android.and04 is waiting for the debugger on port 8100... 04-24 15:41:39.736: I/System.out(438): Sending WAIT chunk 04-24 15:41:39.782: I/dalvikvm(438): Debugger is active 04-24 15:41:39.935: I/System.out(438): Debugger has connected 04-24 15:41:39.935: I/System.out(438): waiting for debugger to settle... 04-24 15:41:40.143: I/System.out(438): waiting for debugger to settle... 04-24 15:41:40.345: I/System.out(438): waiting for debugger to settle... 04-24 15:41:40.545: I/System.out(438): waiting for debugger to settle... 04-24 15:41:40.745: I/System.out(438): waiting for debugger to settle... 04-24 15:41:40.945: I/System.out(438): waiting for debugger to settle... 04-24 15:41:41.145: I/System.out(438): waiting for debugger to settle... 04-24 15:41:41.345: I/System.out(438): waiting for debugger to settle... 04-24 15:41:41.551: I/System.out(438): waiting for debugger to settle... 04-24 15:41:41.755: I/System.out(438): debugger has settled (1348) 04-24 15:41:42.645: D/dalvikvm(438): GC_EXTERNAL_ALLOC freed 985 objects / 78960 bytes in 44ms 04-24 15:41:49.315: W/ActivityManager(58): Launch timeout has expired, giving up wake lock! 04-24 15:41:49.636: W/ActivityManager(58): Activity idle timeout for HistoryRecord{440b4e48 android.and04/.AbsoluteActivity} 04-24 15:41:54.705: D/dalvikvm(114): GC_EXPLICIT freed 150 objects / 7896 bytes in 70ms 04-24 15:42:00.166: W/WindowManager(58): No window to dispatch pointer action 0 04-24 15:42:00.258: W/WindowManager(58): No window to dispatch pointer action 1

Sorry für die schlechte Darstellung, ich bin gerade ziemlich in Eile und weiß nicht, wie ich das gescheit aus Eclipse hier rein bekomme ...

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

24.04.2014, 21:52:16 via App

Das ist nicht der Komplette log. Der rot markierte ist interesant. Da steht normalerweise der Fehler und die Zeile.

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

Antworten
  • Forum-Beiträge: 236

25.04.2014, 07:29:07 via Website

Fehler gefunden!

Im Manifest steht bei "android:name" etwas zuviel - das Package wird doppelt angegeben. Dann kann das ja nicht funktionieren. Ich wusste doch, irgendetwas stimmt mit dieser Activity nicht ...

Antworten
  • Forum-Beiträge: 236

25.04.2014, 16:00:57 via Website

Tja, zu früh gefreut, das war leider nicht der Fehler. Es wird immer noch eine RuntimeExeption geworfen. Dies ist eine Meldung der Variable e bei detailMessage: Unable to start activity ComponentInfo{android.and04/android.and04.AbsoluteActivity}: java.lang.NullPointerException

Hier ein Screenshot vom DebugView mit dem einzigen Stack, bei dem Code angezeigt wird:

image

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

25.04.2014, 16:55:45 via Website

Dann poste bitte wieder dein LogCat aber diesmal schön formatiert :)

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

Antworten
Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 7.167

25.04.2014, 17:23:28 via Website

Habe gerade deine "App" nach gebaut bei mir fällt keine Exception, also schließe ich mal drauß das in deinem Layout nen Button oder ImageView eine andere Id zugewiesen ist wie verlangt.

Poste mal dein Layout.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Antworten
  • Forum-Beiträge: 236

25.04.2014, 20:42:03 via Website

Hallo zusammen,

hier meine Layoutdatei als Anhang, denn es fehlt Code, wenn ich ihn hier versuche einzukopieren ... Genauso ging es mir ja gestern mit dem Log - irgendetwas stimmt hier nicht. Im Beitragsfenster habe ich das Log wunderbar formatiert gesehen und in der Vorschau so unformatiert wie in meinem Beitrag oben.

activity_absolute.xml.pdf

... und hier noch mein Package als Zip:

AND04.zip

Ich hab das Package auch mal meinem Tutor geschickt - er hat bisher keinen Fehler in meinem Code entdecken können. Ich vermute, dass Eclipse sich beim Erstellen "verschluckt" hat - dafür spricht auch die erst erscheinende Fehlermeldung bei this, die dann seltsamerweise wieder weg war. Ich nutze übrigens Eclipse Juno mit ADT-Plugin 22.6.

— geändert am 25.04.2014, 21:05:26

Antworten
  • Forum-Beiträge: 236

27.04.2014, 11:47:22 via Website

Hallo zusammen,

ich hatte meinem Tuto die Zip meines Projektes geschickt. Meine Fehler sind gefunden. Ich hatte einen riesigen Denkfehler in meinem Kopf und hab den Wald vor lauter Bäumen nicht gesehen: Ich habe dummerweise in der Activity-Klasse nicht die IDs aus der Layout-XML-Datei abgerufen, sondern die Bezeichnungen aus meiner Ressourcendatei strings.xml genommen. Und einmal habe ich sie mit CamelCase bezeichnet ("button1_tableLayout";) und in der strings.xml eben nicht ... Das werde ich gleich korrigieren, damit mir nicht noch mal so ein blöder Fehler unterläuft.

Ich danke jedenfalls allen, die sich mit mir den Kopf zerbrochen haben!!!

Antworten

Empfohlene Artikel