listview fehler

  • Antworten:6
  • OffenNicht stickyNicht beantwortet

19.07.2012 10:35:37

hi zusammen

hab das problem das meine App immer abstürzt wenn ich in meiner listview öfters auf ud ab scrolle und ich weis nicht wiso.

1package de.GFD.bapp;
2
3import android.app.Activity;
4import android.content.Context;
5import android.view.LayoutInflater;
6import android.view.View;
7import android.view.ViewGroup;
8import android.widget.BaseAdapter;
9import android.widget.ImageView;
10import android.widget.TextView;
11
12
13
14public class news_list extends BaseAdapter {
15
16 private Activity activity;
17
18
19
20 aktien_stack anfang;
21 aktien_stack hilfe;
22
23 ViewHolder helptag;
24
25 Context context;
26
27 private static LayoutInflater inflater=null;
28
29 public news_list(Context c, Activity a) {
30 this.activity = a;
31 this.context = c;
32 this.getData();
33
34
35 news_list.inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
36 }
37
38
39 public aktien_stack get_aktie_stack(){
40
41 return anfang;
42
43 }
44
45 public void getData(){
46
47 aktien_db adb = new aktien_db(this.context);
48 adb.open();
49 this.anfang = adb.getData(1);
50 adb.close();
51 this.hilfe=this.anfang;
52
53
54 }
55
56
57 public int getCount() {
58 int x = 0;
59
60 aktien_db adb = new aktien_db(this.context);
61 adb.open();
62 x = adb.getRowNumber();
63 adb.close();
64 return x;
65 }
66
67 public Object getItem(int position) {
68 return position;
69 }
70
71 public long getItemId(int position) {
72 return position;
73 }
74
75
76 public static class ViewHolder{
77
78 public TextView name;
79 public TextView stand;
80
81 public ImageView image_icon;
82
83
84 }
85
86 public View getView(int position, View convertView, ViewGroup parent) {
87 View vi=convertView;
88
89 ViewHolder holder;
90
91
92 if(convertView==null){
93
94 vi = inflater.inflate(R.layout.news_list_menue, null);
95
96 holder=new ViewHolder();
97 holder.name=(TextView)vi.findViewById(R.id.menue_news_list_name);
98 holder.stand=(TextView)vi.findViewById(R.id.menue_news_list_stand);
99
100 holder.image_icon = (ImageView)vi.findViewById(R.id.news_menue_icon);
101
102
103
104 vi.setTag(holder);
105
106 }
107 else {
108 holder=(ViewHolder)vi.getTag();}
109
110 holder.name.setText(this.hilfe.Bezeichnung);
111 holder.stand.setText(this.hilfe.standlive);
112
113 holder.image_icon.setImageResource(this.hilfe.getImageId(context , this.hilfe.icon));
114
115 vi.setId(hilfe.ID);
116 hilfe=hilfe.last;
117
118 return vi;
119 }
120
121}

107-19 07:52:52.038: D/AndroidRuntime(2616): Shutting down VM
207-19 07:52:52.038: W/dalvikvm(2616): threadid=1: thread exiting with uncaught exception (group=0xb4061180)
307-19 07:52:52.068: E/AndroidRuntime(2616): FATAL EXCEPTION: main
407-19 07:52:52.068: E/AndroidRuntime(2616): java.lang.NullPointerException
507-19 07:52:52.068: E/AndroidRuntime(2616): at de.GFD.bapp.news_list.getView(news_list.java:113)
607-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.AbsListView.obtainView(AbsListView.java:2012)
707-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.ListView.addViewAbove(ListView.java:2962)
807-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.ListView.scrollListItemsBy(ListView.java:2933)
907-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.ListView.arrowScrollImpl(ListView.java:2397)
1007-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.ListView.arrowScroll(ListView.java:2342)
1107-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.ListView.commonKey(ListView.java:2070)
1207-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.ListView.onKeyDown(ListView.java:2038)
1307-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.KeyEvent.dispatch(KeyEvent.java:2551)
1407-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.View.dispatchKeyEvent(View.java:5500)
1507-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1242)
1607-19 07:52:52.068: E/AndroidRuntime(2616): at android.widget.ListView.dispatchKeyEvent(ListView.java:2023)
1707-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
1807-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
1907-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
2007-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
2107-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
2207-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1246)
2307-19 07:52:52.068: E/AndroidRuntime(2616): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1879)
2407-19 07:52:52.068: E/AndroidRuntime(2616): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1361)
2507-19 07:52:52.068: E/AndroidRuntime(2616): at android.app.Activity.dispatchKeyEvent(Activity.java:2324)
2607-19 07:52:52.068: E/AndroidRuntime(2616): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1806)
2707-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3327)
2807-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewRootImpl.handleFinishedEvent(ViewRootImpl.java:3300)
2907-19 07:52:52.068: E/AndroidRuntime(2616): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2460)
3007-19 07:52:52.068: E/AndroidRuntime(2616): at android.os.Handler.dispatchMessage(Handler.java:99)
3107-19 07:52:52.068: E/AndroidRuntime(2616): at android.os.Looper.loop(Looper.java:137)
3207-19 07:52:52.068: E/AndroidRuntime(2616): at android.app.ActivityThread.main(ActivityThread.java:4424)
3307-19 07:52:52.068: E/AndroidRuntime(2616): at java.lang.reflect.Method.invokeNative(Native Method)
3407-19 07:52:52.068: E/AndroidRuntime(2616): at java.lang.reflect.Method.invoke(Method.java:511)
3507-19 07:52:52.068: E/AndroidRuntime(2616): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
3607-19 07:52:52.068: E/AndroidRuntime(2616): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
3707-19 07:52:52.068: E/AndroidRuntime(2616): at dalvik.system.NativeStart.main(Native Method)



danke schonmal für die hilfe ;)

Gelöschter Account

19.07.2012 11:07:40

Das ist ganz einfach.

In der Zeile "news_list.java:113" wird ein Wert genutzt der NULL enthält.

Ich habe im Laufe der Zeit festgestellt das es durchaus sinnvoll ist im getView() alles mit einem if(xxx != null) abzufedern. Man muss sich einfach vor Augen halten das Android hier Views recycled. in dem einen Moment ist Zeile 2 dran und im nächsten Zeile 9 - es sind aber die selben Views die Du bedienst.

Dein Code sieht so weit IO aus. In meinem Beispiel unten siehst Du aber das ich sogar um die einzelnen Views des ViewHolder ein if() gesetzt habe. Das hat zwei Gründe.

1.) Sollte ich unterschiedliche Layouts für unterschiedliche Layout Größen habe, dann können ja Views existieren oder nicht. Die Daten sind immer die selben aber die Anzahl der sichtbaren Daten ist unterschiedlich. Das if() federt fehlende Views in Layouts ab.

2.) Ich habe schon getView() Aufrufe erlebt die komplett leer waren. Die if() federn auch das alles ab.

1@Override
2public View getView(int position, View contentView, ViewGroup viewGroup) {
3
4 View view = null;
5 ViewHolder viewHolder = null;
6
7 if (contentView == null) {
8 view = layoutInflater.inflate(<...>, null);
9
10 if (view != null) {
11 viewHolder = new ViewHolder();
12 viewHolder.imageView = (MyImageView) view.findViewById(<...>);
13 // ...
14 view.setTag(viewHolder);
15 }
16 } else {
17 view = contentView;
18 viewHolder = (ViewHolder) contentView.getTag();
19 }
20
21 if (viewHolder != null) {
22 if (viewHolder.imageViewFolder != null) {
23 viewHolder.imageView.setImageDrawable(<...>);
24 // ...
25 }
26 }
27
28 return view;
29}

19.07.2012 14:54:22

danke für die hilfe haber aber leider immernoch den selben fehler

habe aber auch die if abfrage mit dem imageViewFolder weggelassen.

da ich nicht weis was das ist und wie ich den benutzen kann.

Mathias