Listfragment mit Header stürtzt beim letzten Element immer ab

  • Antworten:6
rubio
  • Forum-Beiträge: 16

15.08.2011, 07:35:27 via Website

Hi,

ich habe ein Listfragment implementiert welches Daten aus einer Datenbank anzeigt. Dies hat auch funktioniert. Nun habe ich einen Header hinzufügt.

Hierzu folgendes Coding:
1public void onActivityCreated(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3
4
5
6 lv = getListView();
7
8
9 LayoutInflater inflater = getActivity().getLayoutInflater();
10 TableLayout table= (TableLayout)inflater.inflate(R.layout.header, null);
11
12 lv.addHeaderView(table);
13
14
15
16
17 dbHelper=new DBHelper(getActivity());
18 c=dbHelper.getAllItems();
19
20 String from[] = new String[] {"testId","title"};
21 int to[] = new int[] {R.id.colID, R.id.colTitle};
22
23
24 sca=new SimpleCursorAdapter(getActivity()
25 ,R.layout.list_item,c,from,to);
26
27
28 setListAdapter(sca);

Wenn ich nun den letzten Eintrag in der Liste anklicke stürtzt die Anwendung ab. Hierzu folgender Code:

1public void onListItemClick(ListView l, View v, int position, long id) {
2
3
4 c.moveToPosition(position);
5
6
7 c.getString(1);
8
9
10
11 }

Er steigt bei der Methode c.getString(1); aus und zwar nur beim letzten Eintrag. Lasse ich den Header weg funktioniert wieder alles.

Habt ihr eine Ahnung was ich falsch mache.

Vielen Dank im Voraus

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

15.08.2011, 07:53:13 via App

Was ist den da die Absturzmeldung? Ich vermute, das Vllt der Position-Wert, der die übergeben wird nicht zero-based ist und du damit auf eine Row zugreifen willst, die nicht da ist?
Lg Ansgar

Antworten
rubio
  • Forum-Beiträge: 16

15.08.2011, 08:05:06 via Website

Hi,

vielen Dank für die schnelle Antwort. Ich befasse mich erst seit sehr kurzen mit Android wo genau kann ich Infos zur Fehlermeldung finden ..... Im Eclipse habe ich auch im DebugModus nichts gescheites gefunden.

Übrigens würde ein c.getColumnName(0) nach c.moveToPosition(position) funktionieren.

Hast du eine Idee

Vielen Dank im Voraus

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

15.08.2011, 08:28:56 via App

Das findest du Unter Window > show Perspective > DDMS und da beim Logcat.
Naja, wenn du bei der Row im "toten" Bereich bist wird er immer abstürzen, wenn du versuchst einen Wert zu bekommen.
Nur ne Idee, aber versuch mal position-1 zu benutzen, es ist zwar sehr unwahrscheinlich, aber es könnte sein, dass er den Header als erstes (im Code also nulltes) Element ansieht und somit deine gesamte Position einen vorschiebt.
Glaub ich aber selbst nicht :P
Lg Ansgar

— geändert am 15.08.2011, 08:29:43

Antworten
rubio
  • Forum-Beiträge: 16

15.08.2011, 08:46:47 via Website

Hi vielen Dank

-1 hat leider nicht funktioniert: Anbei der Auszug aus dem Log:

08-15 06:43:58.155: ERROR/AndroidRuntime(427): FATAL EXCEPTION: main
08-15 06:43:58.155: ERROR/AndroidRuntime(427): android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:419)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:117)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:31)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at mks.api.OfflineTest.TutListFragment.onListItemClick(TutListFragment.java:71)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.app.ListFragment$2.onItemClick(ListFragment.java:160)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.widget.AdapterView.performItemClick(AdapterView.java:282)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.widget.AbsListView.performItemClick(AbsListView.java:1032)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2447)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.widget.AbsListView$1.run(AbsListView.java:3065)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.os.Handler.handleCallback(Handler.java:587)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.os.Handler.dispatchMessage(Handler.java:92)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.os.Looper.loop(Looper.java:126)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at android.app.ActivityThread.main(ActivityThread.java:3997)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at java.lang.reflect.Method.invoke(Method.java:491)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
08-15 06:43:58.155: ERROR/AndroidRuntime(427): at dalvik.system.NativeStart.main(Native Method)
08-15 06:43:58.176: WARN/ActivityManager(74): Force finishing activity mks.api.OfflineTest/.TutListActivity
08-15 06:43:58.207: WARN/WindowManager(74): Failure taking screenshot for (216x135) to layer 21015
08-15 06:43:58.762: WARN/ActivityManager(74): Activity pause timeout for ActivityRecord{40ad19c8 mks.api.OfflineTest/.TutListActivity}
08-15 06:44:00.305: INFO/Process(427): Sending signal. PID: 427 SIG: 9
08-15 06:44:00.386: INFO/ActivityManager(74): Process mks.api.OfflineTest (pid 427) has died.
08-15 06:44:00.397: ERROR/InputDispatcher(74): channel '414624e0 mks.api.OfflineTest/mks.api.OfflineTest.OfflineTestResultEditorActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x8
08-15 06:44:00.397: ERROR/InputDispatcher(74): channel '414624e0 mks.api.OfflineTest/mks.api.OfflineTest.OfflineTestResultEditorActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
08-15 06:44:00.435: INFO/WindowManager(74): WIN DEATH: Window{40a97d48 mks.api.OfflineTest/mks.api.OfflineTest.TutListActivity paused=false}
08-15 06:44:00.516: INFO/WindowManager(74): WIN DEATH: Window{414624e0 mks.api.OfflineTest/mks.api.OfflineTest.OfflineTestResultEditorActivity paused=false}
08-15 06:44:00.526: INFO/WindowManager(74): WINDOW DIED Window{414624e0 mks.api.OfflineTest/mks.api.OfflineTest.OfflineTestResultEditorActivity paused=false}
08-15 06:44:00.576: ERROR/InputDispatcher(74): Received spurious receive callback for unknown input channel. fd=187, events=0x8
08-15 06:44:01.185: DEBUG/dalvikvm(142): GC_EXPLICIT freed <1K, 15% free 14556K/16967K, paused 47ms+4ms
08-15 06:44:01.336: WARN/InputManagerService(74): Got RemoteException sending setActive(false) notification to pid 427 uid 10036

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

15.08.2011, 09:19:19 via Website

Wie Ansgar geschrieben hat - das ist der Fehler:

CursorIndexOutOfBoundsException: Index 1 requested

Dein Fehler liegt aber woanders. Du musst den Cursor nicht im onListItemClick() positionieren. So kommst Du an Dein Objekt:

1@Override
2protected void onListItemClick(final ListView listView, final View view, final int position, final long id) {
3 super.onListItemClick(listView, view, position, id);
4
5 Cursor cursor = (Cursor) listView.getItemAtPosition(position);
6 String string = cursor.getString(cursor.getColumnIndexOrThrow("DeineSpaltenBezeichnung"));
7}

— geändert am 15.08.2011, 09:19:56

Antworten
rubio
  • Forum-Beiträge: 16

15.08.2011, 10:02:30 via Website

passt vielen Dank

Antworten