Problem: ArrayAdapter mit leerer Array

  • 2 Antworten
  • Letztes Antwortdatum
R

Riscira

Neues Mitglied
0
Hallo,
gestern schon hatte ich eine Frage zu meinem Projekt Notizblock. Leider habe ich heute wieder ein Problem.

Wenn ich ein Array an meinem ArrayAdapter übergebe ohne Inhalt stürzt die App ab. (Bitte erst Quellcode und Logcat überspringen und unten weiterlesen.)

Quellcode:
Code:
public class Overview extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_overview);
		
		String[] values = new String[100];
		ListView listView = (ListView) findViewById(R.id.list);		
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
		registerForContextMenu(listView);
		listView.setAdapter(adapter);
	}

Logcat:
PHP:
01-02 21:51:50.130: D/AndroidRuntime(636): Shutting down VM
01-02 21:51:50.190: W/dalvikvm(636): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
01-02 21:51:50.300: E/AndroidRuntime(636): FATAL EXCEPTION: main
01-02 21:51:50.300: E/AndroidRuntime(636): java.lang.NullPointerException
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.AbsListView.obtainView(AbsListView.java:2271)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.ListView.makeAndAddView(ListView.java:1769)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.ListView.fillDown(ListView.java:672)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.ListView.fillFromTop(ListView.java:733)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.ListView.layoutChildren(ListView.java:1622)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.AbsListView.onLayout(AbsListView.java:2106)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.View.layout(View.java:13754)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewGroup.layout(ViewGroup.java:4364)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.View.layout(View.java:13754)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewGroup.layout(ViewGroup.java:4364)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.View.layout(View.java:13754)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewGroup.layout(ViewGroup.java:4364)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.View.layout(View.java:13754)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewGroup.layout(ViewGroup.java:4364)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.View.layout(View.java:13754)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewGroup.layout(ViewGroup.java:4364)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1868)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1689)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.Choreographer.doCallbacks(Choreographer.java:555)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.Choreographer.doFrame(Choreographer.java:525)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.os.Handler.handleCallback(Handler.java:615)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.os.Handler.dispatchMessage(Handler.java:92)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.os.Looper.loop(Looper.java:137)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at android.app.ActivityThread.main(ActivityThread.java:4745)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at java.lang.reflect.Method.invoke(Method.java:511)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-02 21:51:50.300: E/AndroidRuntime(636): 	at dalvik.system.NativeStart.main(Native Method)







Wenn ich ein Array mit Inhalt übergebe, läuft die App zwar, trotzdem erscheint ein Fehler in der Logcat (der Gleiche, wie wenn die App abstürzt).

Quellcode:
Code:
public class Overview extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_overview);
		
		String[] values = new String[]{"Hallo"};
		ListView listView = (ListView) findViewById(R.id.list);		
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
		registerForContextMenu(listView);
		listView.setAdapter(adapter);


Logcat:
PHP:
01-02 21:38:12.493: E/Trace(1101): error opening trace file: No such file or directory (2)

Habe mich an dieses Tutorial gehalten: Menus | Android Developers

Danke für eure Hilfe!
 
Hi,

der Trace Fehler ist egal.

Das Problem ist, dass du kein leeres Array übergibst, sondern ein Array der Länge 100. D.h. für den Adapter sollten dort 100 Werte drin stehen. Allerdings initilisierst du das Array nicht, weshalb überall null drin steht. Beim Zugriff fliegt dann die oben zu sehende NullPointerException.

Wenn du initial einen leeren ArrayAdapter hast dann benutze entweder ein Array der Länge 0 oder einen der ArrayAdapter Konstruktoren ohne initiales Array. Später kannst du ja mit add ohne Probleme weitere Werte in den Adapter einfügen.
 
Hi,
danke für die Hilfe.

Da ich eine Datenstruktur verwenden möchte, damit es leicher ist die Werte zu speichern, wenn die App geschlossen wird (kann auch eine Fehlannahme sein) habe ich mich für eine dynamische Datenstruktur entschieden (ArrayList), so dass keine NullPointerException geschmiessen werden kann.


Danke!
 
Zurück
Oben Unten