Brauche hilfe bei RuntimeException

  • Antworten:4
  • Bentwortet
Tobias Rychener
  • Forum-Beiträge: 4

17.04.2012, 17:11:07 via Website

Hi Leute,

Ich bin noch relativ neu in der Androidprogrammierung (ca. 7 oder 8 Monate) und bin jetzt an einer Arbeit dran, wo ich einfach nicht weiterweiss. Ich bin schon den ganzen Tag am googeln und hoffe jetzt, dass ihr mir helfen könnt...

Ich habe drei Buttons, von denen aus jeweils eine Activity gestartet wird.
Beim letzten funktioniert das jedoch nicht und ich bekomme folgende Fehlermeldung:

104-17 14:56:13.094: E/AndroidRuntime(496): FATAL EXCEPTION: main
204-17 14:56:13.094: E/AndroidRuntime(496): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.six.android/com.six.android.AbfrageActivity}: java.lang.NullPointerException
304-17 14:56:13.094: E/AndroidRuntime(496): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
404-17 14:56:13.094: E/AndroidRuntime(496): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
504-17 14:56:13.094: E/AndroidRuntime(496): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
604-17 14:56:13.094: E/AndroidRuntime(496): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
704-17 14:56:13.094: E/AndroidRuntime(496): at android.os.Handler.dispatchMessage(Handler.java:99)
804-17 14:56:13.094: E/AndroidRuntime(496): at android.os.Looper.loop(Looper.java:123)
904-17 14:56:13.094: E/AndroidRuntime(496): at android.app.ActivityThread.main(ActivityThread.java:4627)
1004-17 14:56:13.094: E/AndroidRuntime(496): at java.lang.reflect.Method.invokeNative(Native Method)
1104-17 14:56:13.094: E/AndroidRuntime(496): at java.lang.reflect.Method.invoke(Method.java:521)
1204-17 14:56:13.094: E/AndroidRuntime(496): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
1304-17 14:56:13.094: E/AndroidRuntime(496): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
1404-17 14:56:13.094: E/AndroidRuntime(496): at dalvik.system.NativeStart.main(Native Method)
1504-17 14:56:13.094: E/AndroidRuntime(496): Caused by: java.lang.NullPointerException
1604-17 14:56:13.094: E/AndroidRuntime(496): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
1704-17 14:56:13.094: E/AndroidRuntime(496): at android.content.ComponentName.<init>(ComponentName.java:75)
1804-17 14:56:13.094: E/AndroidRuntime(496): at android.content.Intent.<init>(Intent.java:2678)
1904-17 14:56:13.094: E/AndroidRuntime(496): at com.six.android.NotifikationActivity.zeigeAbfrageNotifikation(NotifikationActivity.java:55)
2004-17 14:56:13.094: E/AndroidRuntime(496): at com.six.android.AbfrageActivity.checkAbfrage(AbfrageActivity.java:288)
2104-17 14:56:13.094: E/AndroidRuntime(496): at com.six.android.AbfrageActivity.checkProtokoll(AbfrageActivity.java:213)
2204-17 14:56:13.094: E/AndroidRuntime(496): at com.six.android.AbfrageActivity.starteAbfrage(AbfrageActivity.java:86)
2304-17 14:56:13.094: E/AndroidRuntime(496): at com.six.android.AbfrageActivity.onCreate(AbfrageActivity.java:67)
2404-17 14:56:13.094: E/AndroidRuntime(496): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
2504-17 14:56:13.094: E/AndroidRuntime(496): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

Der Code zur Activity, bei der die App abstürzt (nur das wichtige):
1public void onCreate(Bundle savedInstanceState)
2 {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.abfragen);
5 // Die ImageView im Layout finden, dass die Ampel angezeigt werden kann.
6 final ImageView abfrStatus = (ImageView) findViewById(R.id.abfrStatus);
7
8 // Die mitgegebenen Variabeln aus der vorherigen
9 // Activity lesen.
10 Intent abfr = getIntent();
11
12 // Mitgegebenes Array in ein lokales Array speichern.
13 abfrageZumCheck = abfr.getStringArrayExtra("abfrArray");
14
15 strStatus = checkAbfrage(abfrageZumCheck[0], abfrageZumCheck[1]);
16
17 if (strStatus.equals("erfolg"))
18 {
19 // Ampel auf Grün setzen.
20 abfrStatus.setImageDrawable(getResources().getDrawable(R.drawable.ic_abfrok));
21 }
22 else
23 {
24 // Ampel auf Rot setzen
25 abfrStatus.setImageDrawable(getResources().getDrawable(R.drawable.ic_abfrnok));
26 }
27 }
28
29
30
31/*Code, der vermeintlich nichts mit dem Problem zu tun hat*/
32
33
34protected String checkAbfrage(String strURL, String strOK)
35 {
36 NotifikationActivity notifikation = new NotifikationActivity();
37
38 try
39 {
40 // Versuchen, eine http Verbindung aufzubauen.
41 OpenHttpVerbindung(strURL);
42 }
43 catch (IOException e)
44 {
45 e.printStackTrace();
46
47 // Fehlermeldung auf dem Display ausgeben
48 Toast.makeText(getBaseContext(), "Es konnte keine Verbindung zu der Seite" +
49 " aufgebaut werden. Versuchen Sie es später nochmal" +
50 " oder überprüfen sie die URL", Toast.LENGTH_LONG).show();
51 }
52
53 try
54 {
55 // Versuchen, den Text herunterzuladen
56 strTextVonSeite = DownloadText(strURL);
57 }
58 catch (Exception ex)
59 {
60 ex.printStackTrace();
61 // Fehlermeldung auf dem Display ausgeben
62 Toast.makeText(getBaseContext(), "Der Text konnte nicht heruntergeladen" +
63 " werden.", Toast.LENGTH_SHORT).show();
64 }
65
66
67 if (strTextVonSeite.contains(strOK))
68 {
69 //Toast ausgabe
70
71 return "erfolg";
72
73 }
74 else
75 {
76 //Toast ausgabe
77
78 return "fehler";
79
80 }
81 }


Ich hoffe, ihr findet was, falls ihr das Manifest, ein Layout oder mehr Code braucht, poste ich das gerne.

Gruss
Tobi

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

17.04.2012, 17:39:46 via Website

Welche Zeile ist denn 55 hier ?

Caused by: java.lang.NullPointerException
1604-17 14:56:13.094: E/AndroidRuntime(496): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
1704-17 14:56:13.094: E/AndroidRuntime(496): at android.content.ComponentName.<init>(ComponentName.java:75)
1804-17 14:56:13.094: E/AndroidRuntime(496): at android.content.Intent.<init>(Intent.java:2678)
1904-17 14:56:13.094: E/AndroidRuntime(496): at com.six.android.NotifikationActivity.zeigeAbfrageNotifikation(NotifikationActivity.java:55)


Was eine NullPointerException ist weißt du aber ? Daher sollte sich das schnell eingrenzen lassen!

- mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Tobias Rychener
  • Forum-Beiträge: 4

18.04.2012, 08:02:39 via Website

Soweit ich das verstanden habe, bekomme ich eine NullPointerException, wenn ich auf etwas zeige, das nicht existiert / noch nicht initialisiert wurde oder wenn ich ein Array "überfülle". Korrigiert mich bitte, wenn das nicht stimmt.

1Intent i = new Intent(this, NotifikationView.class);
2i.putExtra("notificationID", notificationID);
3
4PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, i, 0);
Das ist bei Zeile 55 und folgende

das wird dann wohl etwas hiermit zu tun haben?
In der Klasse NotifikationView:
1NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2nm.cancel(getIntent().getExtras().getInt("notificationID"));

— geändert am 18.04.2012, 08:26:34

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

18.04.2012, 08:36:28 via Website

OK also laut Stacktrace passiert der Fehler im <init> Block, das ist der Konstruktor/Body der Klasse selbst.
1at android.content.Intent.<init>(Intent.java:2678)
Das heisst, dass im Konstruktor eine Methode an einem Zeiger aufgerufen wird, der null ist.

Da du nur hier tatsächlich etwas in den Konstruktor übergibst:
1new Intent(this, NotifikationView.class);
und this nicht null sein kann, muss wohl etwas mit den Objekten nicht stimmen, die du übergibst.

Was ist this?
Ist das die Activity, die du so erzeugst? :
1NotifikationActivity notifikation = new NotifikationActivity();

Das würde zumindest den Fehler erklären, weil diese Activity Instanz keinen Context hat.
Man startet Activities immer indirekt über einen Intent, man erstellt nie selbst Instanzen davon.

— geändert am 18.04.2012, 08:37:19

Tobias Rychener

Antworten
Tobias Rychener
  • Forum-Beiträge: 4

18.04.2012, 09:52:40 via Website

Vielen Dank!
Ich habe jetzt die NotifikationActivity gestartet, anstatt eine Instanz von ihr zu erstellen und dann die Funktionen aufzurufen.
Jetzt funktioniert alles fast so wie ich will :bashful:

Ihr habt mir echt geholfen, ich war mit den Nerven am Ende :)

Gruss & Danke
Tobi

Antworten