Brauche Hilfe mit Logcat

  • Antworten:23
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 2.640

01.07.2014, 23:19:41 via Website

Meine App stürtzt beim Start ab und ich kann leider nicht herraufinden, was mir der Logcat sagen will

07-01 16:59:41.320: E/AndroidRuntime(1164): FATAL EXCEPTION: main
07-01 16:59:41.320: E/AndroidRuntime(1164): Process: com.Awlex.schulapp, PID: 1164
07-01 16:59:41.320: E/AndroidRuntime(1164): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.Awlex.schulapp/com.Awlex.schulapp.MainActivity}: java.lang.NullPointerException
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.os.Looper.loop(Looper.java:136)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at java.lang.reflect.Method.invokeNative(Native Method)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at java.lang.reflect.Method.invoke(Method.java:515)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at dalvik.system.NativeStart.main(Native Method)
07-01 16:59:41.320: E/AndroidRuntime(1164): Caused by: java.lang.NullPointerException
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at com.Awlex.schulapp.MainActivity.<init>(MainActivity.java:22)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at java.lang.Class.newInstanceImpl(Native Method)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at java.lang.Class.newInstance(Class.java:1208)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
07-01 16:59:41.320: E/AndroidRuntime(1164):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
07-01 16:59:41.320: E/AndroidRuntime(1164):     ... 11 more

Danke im Vorraus

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

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

02.07.2014, 04:44:35 via App

Ist ne Nurrlpinterexception die irgendwo beim laden derRecourcen auftritt.

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

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

02.07.2014, 08:15:45 via App

Danke für die Hinweise. In der Zeile 22 Hab ich ein Ressourcen-Objekt erzeugt.
Darf man etwa kein Ressourcen-Objekt in der Mainactivity direkt deklarieren?

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

02.07.2014, 17:42:02 via Website

Hier ist mal das Wichtigste vom Code. Hab das Ressourcen-Objekt gegen getResources() eingetauscht.

public class MainActivity extends ActionBarActivity {
        ListView list;
        String[] Kategorie = new String[getResources().getStringArray(R.id.Kategorie).length];
        String[] Fach = new String[getResources().getStringArray(R.id.Fach).length];

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

            list = (ListView) findViewById(R.id.listView1);
            StringArrayBuilder(Kategorie);
            StringArrayBuilder(Fach);
            MyAdapter adapter = new MyAdapter(this, Kategorie, Fach, Aufgabe);
            list.setAdapter(adapter);
        }

        ...

        public void StringArrayBuilder(String[] ss) {

            for (int n = 0; n == ss.length; n++) {

                String[] sKategorie = this.Kategorie;
                String[] sFach = this.Fach;

                sKategorie[n] = getStringText(getResources().getString(id.Kategorie), n);
                sFach[n] = getStringText(getResources().getString(id.Fach), n);
            }

        }

            peotected String getStringText(String s, int position) {
            // TODO Auto-generated method stub
            String text = s + position;
            return text;
        }

        public class MyAdapter extends ArrayAdapter<String> {
            Context context;
            String[] Kategorie;
            String[] Fach;

            MyAdapter(Context c, String[] Kategorie, String[] Fach) {
                    super(c, R.layout.row, R.id.Kategorie, Kategorie);
                    this.context = c;
                    this.Kategorie = Kategorie;
                    this.Fach = Fach;
            }

            public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub

                LayoutInflater inflater = (LayoutInflater) context 
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View row = inflater.inflate(R.layout.row, list, false);       //Muss ich noch verbessern

                TextView Kategorie = (TextView) findViewById(R.id.Kategorie);
                TextView Fach = (TextView) findViewById(R.id.Fach);

                Kategorie.setText(this.Kategorie[position]);
                Fach.setText(this.Fach[position]);

                return row;
            }
        }
    ]

— geändert am 02.07.2014, 17:44:37

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
DroidGeek
  • Forum-Beiträge: 17

02.07.2014, 18:44:17 via Website

1) ListView list;
2) String[] Kategorie = new String[getResources().getStringArray(R.id.Kategorie).length];
3) String[] Fach = new String[getResources().getStringArray(R.id.Fach).length];

Wenn ichs richtig sehe stimmt 1) aber 2) und 3) nicht, soweit ich weiß darf man das Objekt erst in der eigentlichen onCreate()-Methode instanziieren (erzeugen).

Müsste doch so aussehen der obere Teil:

public class MainActivity extends ActionBarActivity {
    ListView list;
    String[] Kategorie;
    String[] Fach;

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

        list = (ListView) findViewById(R.id.listView1);
        Kategorie = new String[getResources().getStringArray(R.id.Kategorie).length];
        Fach = new String[getResources().getStringArray(R.id.Fach).length];
        StringArrayBuilder(Kategorie);
        StringArrayBuilder(Fach);
        MyAdapter adapter = new MyAdapter(this, Kategorie, Fach, Aufgabe);
        list.setAdapter(adapter);
    }

Hoffe ich laber grad kein Müll, falls doch bitte ich um Berichtigung :D

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

02.07.2014, 18:52:22 via Website

@DroidGeek: So wäre es auf jeden Fall strukturierter, weil alle Klssenvariablen in der onCreate Methode initialisiert werden.
Ich nehme auch dan, dass der Fehler nun behoben sein drüfte oder?

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

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

02.07.2014, 22:34:23 via App

Leider nein. So hab ichs bei meinem ersten Versuch gemacht. Keine Veränderung. Ich denke ich schreib die bochmal alles neu. ist ja nur eine Activity, bzw. 2 Methoden

— geändert am 02.07.2014, 22:34:56

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

03.07.2014, 04:44:08 via App

deine Kategorie und Fach hast du zu keinem Zeitpunkt mit Strings befüllt daher Null!

Du hast nur die Länge deklariert mehr nicht.

— geändert am 03.07.2014, 04:45:21

Gruß Ludy (App Entwickler)

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

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

03.07.2014, 05:00:54 via App

Ludy

deine Kategorie und Fach hast du zu keinem Zeitpunkt mit Strings befüllt daher Null!

Du hast nur die Länge deklariert mehr nicht.

Ja, und mir ist auch aufgefallen, dass ich ständig einen gleuchnamigrn String anstelle des Array geholt habe.

Und mit
Kategorie = getResources().getStringArray(R.array.array_Kategorie);
geht's leider auch nicht :(

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

03.07.2014, 06:29:41 via App

Probier mal String [] Kategorie = getResources().getStringArray(R.id.Kategorie)

ohne new String[]

— geändert am 03.07.2014, 06:30:31

Gruß Ludy (App Entwickler)

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

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

03.07.2014, 06:41:38 via Website

Keine Veränderung. Hab ich vielleicht etwas in der arrays.xml falsch gemacht?

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="array_Kategorie">
        <item>Hausaufgabe</item>
        <item>Hausaufgabe</item>
        <item>Hausaufgabe</item>
    </string-array>

    <string-array name="array_Fach">
        <item>Mathematik</item>
        <item>Mathematik</item>
        <item>Mathematik</item>
    </string-array>

</resources>

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
DroidGeek
  • Forum-Beiträge: 17

03.07.2014, 06:53:52 via App

anstatt die variable als array versuch mal ob es geht wenn du stattdessen ne arraylist benutzt.
Bezweifle zwar, dass es daran liegt aber ein Versuch wärs wert denk ich. ;)

— geändert am 03.07.2014, 07:21:25

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

03.07.2014, 07:38:58 via Website

    List<String> alKategorie = Arrays.asList(res.getStringArray(R.array.array_Kategorie));
    List<String> alFach =  Arrays.asList(res.getStringArray(R.array.array_Fach));
    ....
   // in der MyAdapter klasse

    TextView Kategorie = (TextView) findViewById(R.id.Kategorie);
    TextView Fach = (TextView) findViewById(R.id.Fach);

    Kategorie.setText(this.Kategorie.get(position));
    Fach.setText(this.Fach.get(position));

Keine Veränderung...
So langsam glaub ich, dass das was mit dem String[] selbst zu tun hat.

— geändert am 03.07.2014, 07:40:35

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Andy N.
  • Forum-Beiträge: 3.112

03.07.2014, 07:54:03 via Website

Das hier ist falsch:

for (int n = 0; n == ss.length; n++)

ss[ss.length] gibt es nicht, ein Array beginnt bei 0.
Auch solltest Du nicht == als Bedingung nehmen, besser ist auf kleiner/größer zu testen.

Richtig wäre:
for (int n = 0; n <= ss.length - 1; n++)

oder
for (int n = 0; n < ss.length; n++)

Ich empfehle dir, dich mit Debugging zu beschäftigen. Hättest du an der Stelle, an der Logcat einen Fehler angegeben hat einen Breakpoint gesetzt, wäre dir sicherlich der Fehler aufgefallen.

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

03.07.2014, 08:31:06 via Website

Diese Zeile existiert nicht mehr. Hab sie rausgeworfen, nachdem ich den Code neu angeordnet habe.

Das mit dem Debuggen werd ich versuchen, muss mich aber ne weile damit beschäftigen, weil ich eine Laie darin bin.

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

03.07.2014, 15:06:04 via Website

Hier mal mein Test der positiv verlaufen ist
Buil.java

public class Buil extends Activity {

private ListView list;
private String[] Kategorie;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bulid_layout);
    list = (ListView) findViewById(R.id.listView1);
    Kategorie = getResources().getStringArray(R.array.array_Kategorie);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, Kategorie);
    list.setAdapter(adapter);
}

}

arrays.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string-array name="array_Kategorie">
    <item>Hausaufgabe</item>
    <item>Hausaufgabe</item>
    <item>Hausaufgabe</item>
</string-array>
<string-array name="array_Fach">
    <item>Mathematik</item>
    <item>Mathematik</item>
    <item>Mathematik</item>
</string-array>

</resources>

So mehr fällt mir nicht ein außer was soll in MyAdapter adapter = new MyAdapter(this, Kategorie, Fach,

Aufgabe

);
sein?

Gruß Ludy (App Entwickler)

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

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

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

03.07.2014, 15:29:59 via Website

Genau, ich glaube auch dass es an deiner Klasse MyAdapter liegt:
Du definiert den Kostruktor so:

   MyAdapter(Context c, String[] Kategorie, String[] Fach) {

Und übergibst aber aus deiner Activity 4 Parameter, das kann doch nicht gehen

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

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

05.07.2014, 23:28:41 via Website

In Wirklichkeit waren es auch 3 String[]. immer eins weggelassen. Den Fehler hab ich jetzt gefunden.
Ich habe in der getView()

        View row = inflater.inflate(R.layout.row, parent, false);

statt parent immer list übertragen. Dachte es würde keinen unterschied machen, da parent ja auf list verweist.

Danke für euren Beistand bei meinem Problem. Ich habe aber noch eine Frage. Wisst ihr einen Weg, das Datum in einer TV so anzeigen zu lassen, dass z.B. 05.07.14 steht?

Ich hab es mit

Date date = Calendar.getInstance().getTime();
TextView Datum = (TextView) row.findViewById(R.id.tw_Datum);
Datum.setText(date.toString());

Versucht, aber bekomme ich: Sat Jul 05 23.38.22 MESZ 2014

— geändert am 05.07.2014, 23:38:47

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Andy N.
  • Forum-Beiträge: 3.112

05.07.2014, 23:51:08 via Website

Versuch mal:

new SimpleDateFormat("dd.MM.yyyy").format(date)

— geändert am 05.07.2014, 23:51:25

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

06.07.2014, 03:07:58 via Website

holder.hDatum.setText(new SimpleDateFormat("dd-MM-yyyy").format(new Date()));

So löst das bei mir eine invocationTargetException aus.

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Andy N.
  • Forum-Beiträge: 3.112

06.07.2014, 08:59:34 via App

Welches Pakete hat du dem für Date verwendet?

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

07.07.2014, 14:47:05 via Website

Anscheinend war mit dem Datum alles in ordnung. Die wurde ausgelöst, weil ich den vergessen habe die Resourcen zu initialisieren

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten