Finde Fehler im Quellcode trotz Debuggingausgabe meiner ersten AndroidApp nicht [Anfänger]

  • Antworten:8
Lucas
  • Forum-Beiträge: 717

21.01.2014, 20:31:29 via Website

Hey Leute,

ich habe heute meine erste AndroidApp mit AndroidStudio geschrieben.
Leider habe ich das Problem, dass mein Quellcode irgendeinen Fehler beinhaltet.
Da ich totaler Anfänger bin komme ich nicht darauf was es sein kann.

Die Debugging-Fehlermeldung lautet folgendermaßen:
101-21 18:19:58.926 17908-17908/de.lucas.clickgame.firstapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
2 Process: de.lucas.clickgame.firstapp, PID: 17908
3 java.lang.RuntimeException: Unable to start activity ComponentInfo{de.lucas.clickgame.firstapp/de.lucas.clickgame.firstapp.MainActivity}: java.lang.NullPointerException
4 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
5 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
6 at android.app.ActivityThread.access$800(ActivityThread.java:135)
7 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
8 at android.os.Handler.dispatchMessage(Handler.java:102)
9 at android.os.Looper.loop(Looper.java:136)
10 at android.app.ActivityThread.main(ActivityThread.java:5017)
11 at java.lang.reflect.Method.invokeNative(Native Method)
12 at java.lang.reflect.Method.invoke(Method.java:515)
13 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
14 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
15 at dalvik.system.NativeStart.main(Native Method)
16 Caused by: java.lang.NullPointerException
17 at de.lucas.clickgame.firstapp.MainActivity.onCreate(MainActivity.java:31)
18 at android.app.Activity.performCreate(Activity.java:5231)
19 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
20 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
21 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
22 at android.app.ActivityThread.access$800(ActivityThread.java:135)
23 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
24 at android.os.Handler.dispatchMessage(Handler.java:102)
25 at android.os.Looper.loop(Looper.java:136)
26 at android.app.ActivityThread.main(ActivityThread.java:5017)
27 at java.lang.reflect.Method.invokeNative(Native Method)
28 at java.lang.reflect.Method.invoke(Method.java:515)
29 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
30 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
31 at dalvik.system.NativeStart.main(Native Method)
Bisher habe ich herausgefunden, dass folgene Zeile:
1at de.lucas.clickgame.firstapp.MainActivity.onCreate(MainActivity.java:31)
mir den Hinweis liefert, dass sich der Fehler in der MainActivity.java in Zeile 31 beim erstellen Meines Objekts auftritt.

Der Quellcode meiner MainActivity.java lautet: (Zeile 31 wo der Fehler auftritt ist markiert)
1package de.lucas.clickgame.firstapp;
2
3import android.app.AlertDialog;
4import android.support.v7.app.ActionBarActivity;
5import android.support.v7.app.ActionBar;
6import android.support.v4.app.Fragment;
7import android.os.Bundle;
8import android.view.LayoutInflater;
9import android.view.Menu;
10import android.view.MenuItem;
11import android.view.View;
12import android.view.ViewGroup;
13import android.os.Build;
14import android.os.Bundle;
15import android.widget.ProgressBar;
16import android.widget.Button;
17
18public class MainActivity extends ActionBarActivity implements View.OnClickListener {
19
20 ProgressBar bar;
21 Button btn;
22 int i = 1;
23
24
25 @Override
26 protected void onCreate(Bundle savedInstanceState) {
27 super.onCreate(savedInstanceState);
28 setContentView(R.layout.activity_main);
29
30 bar = (ProgressBar)findViewById(R.id.progressBar);
31 bar.setMax(100);
32
33 btn = (Button)findViewById(R.id.button);
34 btn.setOnClickListener(this);
35
36 if (savedInstanceState == null) {
37 getSupportFragmentManager().beginTransaction()
38 .add(R.id.container, new PlaceholderFragment())
39 .commit();
40 }
41 }
42
43 public void onClick(View e){
44 if(e == btn){
45 i += 4;
46 if(i>=100){
47 AlertDialog ad = new AlertDialog.Builder(this).create();
48 ad.setMessage("Du hast gewonnen!!!");
49 ad.show();
50
51 i=0;
52 }
53 bar.setProgress(i);
54 }
55 }
56
57
58 @Override
59 public boolean onCreateOptionsMenu(Menu menu) {
60
61 // Inflate the menu; this adds items to the action bar if it is present.
62 getMenuInflater().inflate(R.menu.main, menu);
63 return true;
64 }
65
66 @Override
67 public boolean onOptionsItemSelected(MenuItem item) {
68 // Handle action bar item clicks here. The action bar will
69 // automatically handle clicks on the Home/Up button, so long
70 // as you specify a parent activity in AndroidManifest.xml.
71 int id = item.getItemId();
72 if (id == R.id.action_settings) {
73 return true;
74 }
75 return super.onOptionsItemSelected(item);
76 }
77
78 /**
79 * A placeholder fragment containing a simple view.
80 */
81 public static class PlaceholderFragment extends Fragment {
82
83 public PlaceholderFragment() {
84 }
85
86 @Override
87 public View onCreateView(LayoutInflater inflater, ViewGroup container,
88 Bundle savedInstanceState) {
89 View rootView = inflater.inflate(R.layout.fragment_main, container, false);
90 return rootView;
91 }
92 }
93
94}

Der Großteil des Quelltextes war von AdnroidStudio schon so angegeben.
Ich habe nur folgendes hinzugefügt:
1bar = (ProgressBar)findViewById(R.id.progressBar)
2 bar.setMax(100);
3
4 btn = (Button)findViewById(R.id.button);
5 btn.setOnClickListener(this);
und
1public void onClick(View e){
2 if(e == btn){
3 i += 4;
4 if(i>=100){
5 AlertDialog ad = new AlertDialog.Builder(this).create();
6 ad.setMessage("Du hast gewonnen!!!");
7 ad.show();
8
9 i=0;
10 }
11 bar.setProgress(i);
12 }
13 }


Was auch noch hilfreich sein könnte ist der Inhalt meiner fragment_main.xml:
1<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:paddingLeft="@dimen/activity_horizontal_margin"
6 android:paddingRight="@dimen/activity_horizontal_margin"
7 android:paddingTop="@dimen/activity_vertical_margin"
8 android:paddingBottom="@dimen/activity_vertical_margin"
9 tools:context="de.lucas.clickgame.firstapp.MainActivity$PlaceholderFragment">
10
11 <Button
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content"
14 android:text="@string/button"
15 android:id="@+id/button"
16 android:layout_alignParentTop="true"
17 android:layout_alignParentLeft="true"
18 android:layout_alignParentStart="true"
19 android:layout_alignParentRight="true"
20 android:layout_alignParentEnd="true" />
21
22 <ProgressBar
23 style="?android:attr/progressBarStyleHorizontal"
24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content"
26 android:id="@+id/progressBar"
27 android:layout_below="@+id/button"
28 android:layout_alignParentLeft="true"
29 android:layout_alignParentStart="true"
30 android:layout_alignParentRight="true"
31 android:layout_alignParentEnd="true"
32 android:minHeight="40dp" />
33</RelativeLayout>

Ich gehe davon aus, dass der Fehler von einem Fortgeschrittenen schnell zu finden sein wird un nur für mich als absoluter Anfänger nicht findbar ist.
Ich würde mich über Hilfe freuen.
Falls die vielen Informationen nicht genug sein sollten, kann ich gerne nachliefern.

MfG
Lucas

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

22.01.2014, 06:59:20 via App

Wird die Progress Bar aus dem Layout gefunden bzw. ist de Variable gesetzt?
zeile 31 vlt mal debuggeb und überprüfen ob die Variable bar null ist oder nicht.

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

Antworten
Lucas
  • Forum-Beiträge: 717

22.01.2014, 07:05:56 via App

Pascal P.
Wird die Progress Bar aus dem Layout gefunden bzw. ist de Variable gesetzt?
zeile 31 vlt mal debuggeb und überprüfen ob die Variable bar null ist oder nicht.

Die Progressbar wurde euch im Fragment_Main.xml gesetzt. Diese habe ich ja ganz unten hinzugefügt.

Die Frage wird jetzt etwas dumm sein, aber wie geht das debuggen :D

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

22.01.2014, 07:12:51 via App

Gibts als tutorials einfach googleln. In Android Studio kenn ich mich nicht aus aber normalerweise musst du einen Breakpint setzen und die App dann im Debugmodus starten. Sobald die Stelle des Breakpointes erreicht wird, kannst du in die Variablen reinschauen.

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

Antworten
Lucas
  • Forum-Beiträge: 717

22.01.2014, 07:14:22 via App

Pascal P.
Gibts als tutorials einfach googleln. In Android Studio kenn ich mich nicht aus aber normalerweise musst du einen Breakpint setzen und die App dann im Debugmodus starten. Sobald die Stelle des Breakpointes erreicht wird, kannst du in die Variablen reinschauen.

Ah okay so meinst du.
Mache ich heute so gegen 17:30 nach der Schule, ich melde mich dann nochmal

Antworten
Fabian
  • Forum-Beiträge: 144

22.01.2014, 16:38:19 via App

Sicher dass es die Methode setMax() gibt? Und Views vergleicht man mit view.getId()...
getId() gibt einen Integer zurück...

Grüße Fabian

Antworten
Lucas
  • Forum-Beiträge: 717

22.01.2014, 19:30:57 via Website

Pascal P.
Gibts als tutorials einfach googleln. In Android Studio kenn ich mich nicht aus aber normalerweise musst du einen Breakpint setzen und die App dann im Debugmodus starten. Sobald die Stelle des Breakpointes erreicht wird, kannst du in die Variablen reinschauen.

So, Breakpoint ist gesetzt. Nun habe ich aber das Problem, das ich mit den angaben nichts anfangen kann, wo finde ich da die Variable?

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

22.01.2014, 20:30:08 via App

Wie gesagt AndroidStudio kenne icht nch.
Normalerweise Mauszeiger über die entsprechende Variable halten und dann daten auschauen

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

Antworten
Lucas
  • Forum-Beiträge: 717

22.01.2014, 20:38:37 via Website

Irgendwie lag es daran, das ich fragement_main.xml und activity_main.xml durheinander gebracht.
Ich habe jetzt einfach ein Projekt mit eclipse erstellt, das NUR die activity_main.xml erstellt und das dann in AndroidStudio importiert.

Antworten