ListView aus SqLite DB mittels ArrayAdapter initialisieren

  • Antworten:10
Andi G
  • Forum-Beiträge: 7

02.02.2014, 23:00:19 via Website

Hallo ich bin neu hier im Forum und bitte euch um eure Hilfe.
Ich habe schon einige Tag nach der Lösung gesucht, aber nix hat mir geholfen bei meinem Problem.

Ich möchte eine ListView erstellen, mit jeweils 2 TextViews.
Dabei verwende ich einen ArrayAdapter, den ich mit einer ArrayList <String[]> , einem selbstbearbeitetem "ListViewLayout" und dem id int - Wert des ersten TextViews initialisiert habe.

Das Problem ist, dass in der getView Methode eine NullPointerException geworfen wird.

Ihr seht es im Quellcode:

1public class ListPersonen extends Activity {
2
3 private static final String TAG = ListPersonen.class.getSimpleName();
4
5 private RegisterHelper helper;
6 private SQLiteDatabase registerDB;
7
8 private ArrayAdapter<String[]> adapter;
9 private ArrayList<String[]> entriesPersonen;
10
11 private ListView listView;
12 private Cursor personenCursor;
13
14 public TextView tv_Name, tv_Amount;
15
16 private final String SHOW_THIS_ENTRIES = "SELECT * FROM Personen ORDER BY name";
17
18 @Override
19 protected void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 // Remove title bar
22 this.requestWindowFeature(Window.FEATURE_NO_TITLE);
23
24 // Remove notification bar
25 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
26 WindowManager.LayoutParams.FLAG_FULLSCREEN);
27
28 setContentView(R.layout.list_personen_entries);
29
30 if (helper == null)
31 helper = new RegisterHelper(this);
32
33 listView = (ListView) findViewById(R.id.lv_personen);
34
35 showPersonenEntries();
36
37 Log.d(TAG, "Vor getView Methode");
38
39 adapter = new ArrayAdapter<String[]>(this,
40 andi.example.thedepts.R.layout.personen_info,
41 andi.example.thedepts.R.id.tv_peronen_name, entriesPersonen) {
42
43 @Override
44 public View getView(int position, View convertView, ViewGroup parent) {
45 Log.d(TAG, "In der getView Methode");
46 View v = convertView;
47
48 String[] entry = entriesPersonen.get(position);
49
50 if (v == null) {
51 Log.d(TAG, "v = null");
52
53 LayoutInflater myInflater = (LayoutInflater) ListPersonen.this
54 .getSystemService(LAYOUT_INFLATER_SERVICE);
55
56 v = myInflater.inflate(R.layout.personen_info, null);
57
58 tv_Name = (TextView) v
59 .findViewById(andi.example.thedepts.R.id.tv_peronen_name);
60 tv_Amount = (TextView) v
61 .findViewById(andi.example.thedepts.R.id.tv_personen_betrag);
62
63// tv_Name.setText(entry[0]);
64// tv_Amount.setText("€ " + entry[1]);
65
66 }
67
68 Log.d(TAG, entry[0] + " " + entry[1]);
69
70 // if (Float.parseFloat(entry[1]) < 0) {
71 // tv_Amount.setTextColor(Color.RED);
72 // }
73 // if (Float.parseFloat(entry[1]) > 0) {
74 // tv_Amount.setTextColor(Color.GREEN);
75 // }
76
77 return v;
78 }
79
80 };
81 Log.d(TAG, "Nach getView Methode");
82
83 listView.setAdapter(adapter);
84 // setListener();
85
86 }
87
88 public static class ViewHolder {
89 public TextView tv_Name, tv_Amount;
90 }
91
92 public String showPersonenEntries() {
93 registerDB = helper.getReadableDatabase();
94 entriesPersonen = new ArrayList<String[]>();
95 try {
96 personenCursor = registerDB.rawQuery(SHOW_THIS_ENTRIES, null);
97 while (personenCursor.moveToNext()) {
98 String temp1 = personenCursor.getString(0);
99 float temp2 = personenCursor.getFloat(1);
100
101 String[] entry = { temp1, String.valueOf(temp2) };
102
103 entriesPersonen.add(entry);
104
105 }
106
107 Log.d(TAG, "Wird angezeigt Personen");
108 } catch (Exception e) {
109 Log.e(TAG, "Fehler beim anzeigen :" + e.toString());
110 } finally {
111 registerDB.close();
112 }
113 return null;
114 }


Die Exception im LogCat.
102-02 21:57:38.004: D/ListPersonen(1727): Wird angezeigt Personen
202-02 21:57:38.004: D/ListPersonen(1727): Vor getView Methode
302-02 21:57:38.014: D/ListPersonen(1727): Nach getView Methode
402-02 21:57:38.064: D/ListPersonen(1727): In der getView Methode
502-02 21:57:38.064: D/ListPersonen(1727): v = null
602-02 21:57:38.084: D/ListPersonen(1727): hgf -657.0
702-02 21:57:38.084: D/AndroidRuntime(1727): Shutting down VM
802-02 21:57:38.084: W/dalvikvm(1727): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
902-02 21:57:38.134: E/AndroidRuntime(1727): FATAL EXCEPTION: main
1002-02 21:57:38.134: E/AndroidRuntime(1727): java.lang.NullPointerException
1102-02 21:57:38.134: E/AndroidRuntime(1727): at andi.example.thedepts.ListPersonen$1.getView(ListPersonen.java:105)
1202-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.AbsListView.obtainView(AbsListView.java:2271)
1302-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
1402-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.ListView.onMeasure(ListView.java:1156)
1502-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.View.measure(View.java:15172)
1602-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
1702-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
1802-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
1902-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
2002-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.View.measure(View.java:15172)
2102-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
2202-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
2302-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.View.measure(View.java:15172)
2402-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
2502-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
2602-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
2702-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
2802-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.View.measure(View.java:15172)
2902-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
3002-02 21:57:38.134: E/AndroidRuntime(1727): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
3102-02 21:57:38.134: E/AndroidRuntime(1727): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
3202-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.View.measure(View.java:15172)
3302-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850)
3402-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102)
3502-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275)
3602-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
3702-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
3802-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
3902-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
4002-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.Choreographer.doFrame(Choreographer.java:525)
4102-02 21:57:38.134: E/AndroidRuntime(1727): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
4202-02 21:57:38.134: E/AndroidRuntime(1727): at android.os.Handler.handleCallback(Handler.java:615)
4302-02 21:57:38.134: E/AndroidRuntime(1727): at android.os.Handler.dispatchMessage(Handler.java:92)
4402-02 21:57:38.134: E/AndroidRuntime(1727): at android.os.Looper.loop(Looper.java:137)
4502-02 21:57:38.134: E/AndroidRuntime(1727): at android.app.ActivityThread.main(ActivityThread.java:4745)
4602-02 21:57:38.134: E/AndroidRuntime(1727): at java.lang.reflect.Method.invokeNative(Native Method)
4702-02 21:57:38.134: E/AndroidRuntime(1727): at java.lang.reflect.Method.invoke(Method.java:511)
4802-02 21:57:38.134: E/AndroidRuntime(1727): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
4902-02 21:57:38.134: E/AndroidRuntime(1727): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
5002-02 21:57:38.134: E/AndroidRuntime(1727): at dalvik.system.NativeStart.main(Native Method)

vielleicht kann mir irgendwer helfen. Ich wäre sehr Dankbar.

Antworten
Andi G
  • Forum-Beiträge: 7

03.02.2014, 11:14:08 via Website

oje wie kann man des löschen? Ich habs falsch gepostet ^^

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

03.02.2014, 11:18:10 via App

Hallo und herzlich willkommen bei uns im Forum :)

Ich habe deinen Thread mal eben in die passende Kategorie verschoben ;)

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Antworten
Andi G
  • Forum-Beiträge: 7

03.02.2014, 11:33:25 via Website

Danke Andy ^^

Antworten
impjor
  • Forum-Beiträge: 1.793

03.02.2014, 12:08:16 via App

Warum andi.depts.R.xxx? Nutze direkt R.xxx!
Am besten noch die entsprechende Zeile, in der der Fehler liegt hier makieren, durch die fehlenden Imports stimmen die Zeilennummern nämlich nicht.

LH

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Andi G
  • Forum-Beiträge: 7

03.02.2014, 12:42:09 via Website

Die Ecxeption wird genau in der Zeile geworfen, wo ich den Text vom TextView tv_Name setzen wollte.
Was ich aber nicht versteh warum dort eine NullPointerException ist.

1tv_Name.setText(entry[0]);
2 tv_Amount.setText("€ " + entry[1]);
3 return v;

andi.depts.R.xxx habe ich versucht weil ich dachte, dass er vielleicht die Recource datei nicht gefunden hat..

— geändert am 03.02.2014, 12:43:26

Antworten
Andi G
  • Forum-Beiträge: 7

03.02.2014, 15:30:43 via Website

aber warum? ich habs doch durch findViewById(xxx) initialisiert??
Wie kann das sein?

Antworten
Andi G
  • Forum-Beiträge: 7

03.02.2014, 17:19:21 via Website

Verdammt nein tut es nicht.... es beinhaltet die id R.id.tv_personen_name. ich habe das r vergessen. jedoch bekam ich keinen error, weil
es das textView tv_peronen_name auch in einem anderen xml layout gab. also nur ein schreibfehler :)

Vielen Dank für deine Hilfe!!!!

— geändert am 03.02.2014, 17:20:09

Antworten