Context

  • 28 Antworten
  • Letztes Antwortdatum
Okay, hab ich gemacht. Dann gehts weiter mit Nullpointern:unsure:

In der onActivityCreated des Fragments füge ich folgendermaßen Daten in die ListView:
PHP:
        Detail.setIcon(R.drawable.red_arrow);
        Detail.setName("Name");
        Detail.setSub("Sub");
        Detail.setDesc("Desc");
        Detail.setTime("13/12/2012 10:12");
        details.add(Detail);

        msgList.setAdapter(new CustomAdapter(details, context));
Das klappt auch ohne Probleme und das wird auch in der ListView angezeigt, wenn ich nun mit der Methode weitere Daten hinzufügen will, müsste das ja THEORETISCH genauso gehen :confused2:

Zumindest dachte ich das und hab nun in der Methode das stehen:
PHP:
        Detail.setIcon(R.drawable.red_arrow);
        Detail.setName("Name");
        Detail.setSub("Sub");
        Detail.setDesc("Desc");
        Detail.setTime("13/12/2012 10:12");
        details.add(Detail);

        msgList.setAdapter(new CustomAdapter(details, context));

Nun kommen aber wieder Nullpointerexceptions :unsure:
 
Also wenn du einen Adapter zu einem Listview hinzufügst,
dann musst du Ihn nicht ständig neu setzen.

details vermute ich, dürfte in etwa so etwas sein

details = new Arraylist<Detail>();


onActivityCreated

Woher kommt dein context ?

Innerhalb eines Fragments bekommt man den am besten per getActivity();

->

msgList.setAdapter(new CustomAdapter(details, getActivity()));


-> wenn du jetzt neue Details setzen willst, brauchst du halt
(Ich vermute Detail ist lediglich ein statisches Objekt)

mydetail = new Detail();

mydetail.setIcon(R.drawable.red_arrow);
mydetail.setName("Name");
mydetail.setSub("Sub");
mydetail.setDesc("Desc");
mydetail.setTime("13/12/2012 10:12");
details.add(
mydetail);

hier kann es nur sein, das du den adapter noch informieren musst das neue Daten vorliegen

in etwa soetwas

msgList.getAdapter().notifyDataSetChanged();
--
Aber, ich bin nicht so ein Freund von generischen/anonymen Methoden

ich würde lieber gleich so was machen wie
(var definition im Header der Klasse private CustomAdapter myCustomAdapter;)

oncreate

detail = new Arraylist<Detail>();

im onActivityCreated (wegen context)

myCustomAdapter = new CustomAdapter(details, getActivity());
msgList.setAdapter(myCustomAdapter);

Und wenn du jetzt Details hinzufügst, dann gleich den Adapter füttern


myCustomAdapter.add(mydetail);

Wie gesagt, das ist aber nur eine Geschmacksfrage.
 
Okay, ich versuche grade die erste Variante.


PHP:
Detail = new MessageDetails();
        Detail.setIcon(R.drawable.red_arrow);
        Detail.setName("Bob");
        Detail.setSub("Dinner");
        Detail.setDesc("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla auctor.");
        Detail.setTime("12/12/2012 12:12");
        details.add(Detail); 
        
        msgList.setAdapter(new CustomAdapter(details, getActivity()));

Damit bekomme ich schonmal keine Nullpointerexception mehr, jedoch wirds auch nicht hinzugefügt :huh:
Ich denke das da etwas refresht werden muss. Mit deinem

msgList.getAdapter().notifyDataSetChanged(); klappt es aber nicht, da er die notifyDataSetChanged Methode nicht findet
 
Wie gesagt du musst den Adapter nicht jedes Mal neu setzen wenn du etwas hinzufügst. 1x am Anfang reicht

Wegen dem Notify, es kann sein das du den Adapter noch Casten musst

((CustomAdapter) msgList.getAdapter()).notifyDataSetChanged();
 
Ach verdammt.
Mir ist klar warum grade keine nullpointerexception kam. Weil ich die Methode auch garnicht hab aufrufen lassen -.-

Ich hab jetzt nochmal geschaut und die nullpointerexception tritt auch schon durch:
Detail = new MessageDetails();
Detail.setIcon(R.drawable.red_arrow);
Detail.setName("Bob");
Detail.setSub("Dinner");
Detail.setDesc("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla auctor.");
Detail.setTime("12/12/2012 12:12");
details.add(Detail);

dieses auf.

Mhhhh na klasse
 
Snipestyle schrieb:
Ist "eigentlich" relativ simpel erklärt.
Die MainMenu Activity ruft die DataActivity auf. Die DataActivity führt darauf hin ein paar Zugriffe auf php Dateien aus und liest etwas aus. Das Ergebnis gibt bzw. soll mir dann die DataActivity zurück in die MainMenu Activity geben, wo ich dieses dann weiterverarbeiten bzw. Ausgeben kann.

Reicht das an Informationen oder musst du mehr wissen?:confused2:

Hallo,
vielleicht stellt diese Vorgehensweise einen konzeptionellen Fehler dar? Oder, was auch sehr gut sein kann(!), ich verstehe nicht ganz den Zusammenhang..
Erbt deine DataActivity von Activity? Wenn ja, warum?
Ich habe einen ähnlichen Mechanismus direkt in der Activity gestartet, in der auch der Datensatz empfangen wird und von dort aus wird er "weiterverarbeitet"..
Allerdings hatte ich auch (schwer) mit Nullptrs zu kämpfen als ich mein Android-Projekt mit einer Web-API mit php verknüpft habe, wobei diese Art von Nullptrs (jedenfalls für mich) als extrem schwer ausfindig zu machen waren.
Schließlich kam ich auf eine Lib, die recht viel Arbeit übernimmt und jedenfalls bei mir das Gröbste zum Laufen gebracht hat.
Siehe hier -> Android Asynchronous Http Client
Vielleicht hilft dir das, vielleicht geht's auch voll am Problem vorbei :p
 
Mhhh ich glaube weiterhelfen tut mir das nicht, aber danke für den Tipp ! :) Also es ist wirklich nur noch dieser eine Schritt, warum meine Fragmente Nullpointer kriegen nachdem ich DataActivity class ausgeführt habe. Das wird bestimmt wieder irgendeine Context geschichte sein
 
Und wenn du es so machst, wie es killphil75 bereits vor ein paar Beiträgen geschrieben hat?
Sprich ein Objekt anlegen und das dann manipulieren?

Also anstatt:
Code:
Detail = new MessageDetails();
 Detail.setIcon(R.drawable.red_arrow);
 Detail.setName("Bob");
 Detail.setSub("Dinner");
 Detail.setDesc("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla auctor.");
 Detail.setTime("12/12/2012 12:12");
 details.add(Detail);


es so angehen..
Code:
ArrayList<Detail>details = new ArrayList<Detail>();
mydetail = new Detail();
 
 mydetail.setIcon(R.drawable.red_arrow);
 mydetail.setName("Name");
 mydetail.setSub("Sub");
 mydetail.setDesc("Desc");
 mydetail.setTime("13/12/2012 10:12");
 details.add(mydetail);
 
Code:
[COLOR=#000000][COLOR=#0000BB] MainMenu m1 [/COLOR][COLOR=#007700]= new [/COLOR][COLOR=#0000BB]MainMenu[/COLOR][COLOR=#007700]();
 [/COLOR][COLOR=#0000BB]m1[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]showData[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]result[/COLOR][COLOR=#007700]); [/COLOR][/COLOR]
Das ist dein Problem (wie schon @Zoopa anmerkte). So wie oben sollte man einfach keine Instanz einer Activity bilden. So meldest du die Activity nicht beim System an (Observer Pattern).

Eine Activity kannst du im Programmcode nur mit startActvity() starten. Alles andere funktioniert nicht wirklich vernünftig. Du wirst noch unendlich viele NullpointerException erhalten, wenn du so weiter machst. Lese Dir die Doku durch, und fange dann am besten von vorne an.

Building Your First App | Android Developers
Application Fundamentals | Android Developers

Die Namensgebung deiner Klassen ist das nächste Problem, bei einem MainMenu würde ich eine Klasse erwarten, die das Menu Interface implementiert hat, nich aber eine Klasse, die von der Klasse Activity erbt. Bei so irreführende Namen kann man sich ja Code produzieren, der nicht funktioniert.
 
Zurück
Oben Unten