Werte aus Datenbank in verschiedenen Spalten und Zeilen in einer Liste ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Werte aus Datenbank in verschiedenen Spalten und Zeilen in einer Liste ausgeben

    Hier zeige ich Euch wie man mehrere Spalten einer Datenbank auslesen und
    diese in einem eigenen Layout ausgeben lassen kann.

    Für dieses Beispiel habe ich ein Layout mit zwei Spalten und zwei Zeilen gewählt.
    wobei sich in der ersten Spalte ein Symbol befindet, das je nach ausgelesenem Wert
    einer Spalte in der Datenbank ein anderes Symbol anzeigt.

    Hier ein erster Eindruck




    activity "fahrzeuge.java"

    Java-Quellcode

    1. public void onCreate(Bundle savedInstanceState) {
    2. super.onCreate(savedInstanceState);
    3. }





    Java-Quellcode

    1. @Override
    2. protected void onStart() {
    3. super.onStart();
    4. SQLiteDatabase myDB = null;
    5. try{
    6. myDB = this.openOrCreateDatabase("TankPro2", MODE_PRIVATE, null);
    7. Cursor c = myDB.rawQuery("SELECT _id, name || ', ' || model as bezeichnung, " +
    8. "zuletztgetankt, " +
    9. "nutzungsart " +
    10. "FROM fahrzeuge", null);
    11. startManagingCursor(c);
    12. getListView().setOnCreateContextMenuListener(this);
    13. final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
    14. R.layout.fahrzeuge,
    15. c,
    16. new String[] { "_id", "zuletztgetankt", "nutzungsart" },
    17. new int[] { R.id.KfzNameModel, R.id.KfzLastFuel, R.id.ico }
    18. );
    19. adapter.setViewBinder(new ViewBinder()
    20. {
    21. @Override
    22. public boolean setViewValue(View view, Cursor theCursor, int column)
    23. {
    24. switch(view.getId()) {
    25. case R.id.KfzNameModel:
    26. final String ColNameModel = theCursor.getString(1); //Name und Model
    27. ((TextView)view).setText(ColNameModel);
    28. return true;
    29. case R.id.KfzLastFuel:
    30. final String ColLastFuel = theCursor.getString(2); //Zuletzt getankt
    31. ((TextView)view).setText(Datum(ColLastFuel));
    32. return true;
    33. case R.id.ico:
    34. final int ColVerw = theCursor.getInt(3); //Nutzungsart
    35. if(ColVerw == 0) {
    36. ((ImageView)view).setImageResource(R.drawable.privat);
    37. }
    38. else if(ColVerw == 1){
    39. ((ImageView)view).setImageResource(R.drawable.beruflich);
    40. }
    41. else if(ColVerw == 2){
    42. ((ImageView)view).setImageResource(R.drawable.gemischt);
    43. }
    44. return true;
    45. }
    46. return false;
    47. }
    48. });
    49. this.setListAdapter(adapter);
    50. }finally {
    51. if (myDB != null)
    52. myDB.close();
    53. }
    54. }
    Alles anzeigen





    Hilfsfunktion die uns ein Datum im SQL-Format in ein Datum in deutscher Schreibweise umwandelt.

    Java-Quellcode

    1. private String Datum(String datum){
    2. String result = null;
    3. if(datum!=null){
    4. result = "Zuletzt getankt am: " + datum.substring(8, 10)+"."+datum.substring(5, 7)+"."+datum.substring(0, 4);
    5. }
    6. else {
    7. result="Noch nicht getankt";
    8. }
    9. return(result);
    10. }





    fahrzeuge.xml

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="fill_parent"
    4. android:layout_height="?android:attr/listPreferredItemHeight"
    5. android:padding="6dip">
    6. <ImageView
    7. android:id="@+id/ico"
    8. android:layout_width="wrap_content"
    9. android:layout_height="fill_parent"
    10. android:layout_marginRight="6dip"
    11. android:src="@drawable/icon">
    12. </ImageView>
    13. <LinearLayout
    14. android:orientation="vertical"
    15. android:layout_width="0dip"
    16. android:layout_weight="1"
    17. android:layout_height="fill_parent">
    18. <TextView
    19. android:id="@+id/KfzNameModel"
    20. android:layout_width="fill_parent"
    21. android:layout_height="0dip"
    22. android:layout_weight="1"
    23. android:gravity="center_vertical"
    24. android:text="My Application"
    25. android:textColor="#FFFFFF"
    26. android:textSize="23px">
    27. </TextView>
    28. <TextView
    29. android:id="@+id/KfzLastFuel"
    30. android:layout_width="fill_parent"
    31. android:layout_height="0dip"
    32. android:layout_weight="1"
    33. android:singleLine="true"
    34. android:ellipsize="marquee">
    35. </TextView>
    36. </LinearLayout>
    37. </LinearLayout>
    Alles anzeigen






    Hier noch eine Funktion mit der Sie die Datenbank und die für dieses Bsp. benötigten
    Datenbanktabellen anlegen können.


    Java-Quellcode

    1. private void onCreateDBAndDBTabled()
    2. {
    3. SQLiteDatabase myDB = null;
    4. try {
    5. myDB = this.openOrCreateDatabase("TankPro2", MODE_PRIVATE, null);
    6. Log.v(tag, "DB created");
    7. // myDB.execSQL("DROP TABLE IF EXISTS fahrzeuge;");
    8. // myDB.execSQL("DROP TABLE IF EXISTS tanken;");
    9. myDB.execSQL("CREATE TABLE IF NOT EXISTS fahrzeuge" +
    10. " (_id integer primary key autoincrement, " +
    11. "name varchar(100), " +
    12. "model varchar(100), " +
    13. "bemerkungen varchar(255), " +
    14. "kraftstoffart integer(3), " +
    15. "tankinhalt integer(3), " +
    16. "nutzungsart integer(1), " +
    17. "zuletztgetankt date, "+
    18. "kmstand integer)"
    19. +";");
    20. Log.v(TankPro2.tag, "DB-Table fahrzeuge created");
    21. myDB.execSQL("CREATE TABLE IF NOT EXISTS tanken "
    22. + " (_id integer primary key autoincrement, " +
    23. "kfzid integer, " +
    24. "datum date, " +
    25. "kmstand integer, " +
    26. "getankt decimal(12,3), " +
    27. "gezahlt decimal(12,3), " +
    28. "bemerkungen varchar(255))"
    29. +";");
    30. Log.v(TankPro2.tag, "DB-Table tanken created");
    31. } finally {
    32. if (myDB != null)
    33. myDB.close();
    34. }
    35. }
    Alles anzeigen
    HTC-Magic white
    Development: Eclipse Ganymede + Android SDK 1.5
    Linux Mint 6
  • Hallo,
    ich habe ein Problem mit dem Code:
    Eclipse wirft mir zwei Fehlermeldungen aus egal ob ich 1.6 oder 2.0+ als Android-Version ausgewählt habe:

    "The method getListView() is undefined for the type..."
    und
    "The method setListAdapter(SimpleCursorAdapter) is undefined for the type..."

    Wie kriege ich die Methoden ran??


    Viele Grüße

    Joggel
  • Hallo ensacom,

    ich hab mir mal dein Beispiel angeschaut und ich bekomm bei mir einen FC in der App kann das zusammenhängen das ich eine fragment class und activity class?

    Sag mir bescheid was für ein Quellcode ich posten soll!!


    mfg androidseb
  • ensacom war das letzte mal im Februar 2010 hier im Forum aktiv... ich denke es ist unwahrscheinlich, dass er antworten wird :-/
    Bei Unklarheiten, halten Sie Ihren Kopf kurz in eine Schüssel voll klarem Wasser, dann wirds etwas klarer. Danke ;)

    Gruß Andi ---- Das Huhn oder das Ei zuerst? ;)
    Funtik -- G+
  • Wenn sich das Ding nicht automatisch einblendet, such mal unten die Schaltfläche 'Android'.
    Eventuell musst du noch die Filter deaktivieren oder zumindest anders einstellen.
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«
  • So danke hab ihn gefunden :)

    Im Anhang der Logcat, was ich rausgelesen hab er kann die table nicht finden obwohl sie erstellt wird :/ und ich sie auch unter data/data/<packagename> finde
    Dateien
    • logcat.txt

      (4,09 kB, 464 mal heruntergeladen, zuletzt: )
  • Tja, das lese ich auch so heraus.

    Kannst du mal testweise den direkten Code zum Datenaufbau vom Threadersteller nehmen und schauen, ob es damit geht?
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«
  • Lucas de Vil schrieb:


    Tja, das lese ich auch so heraus.

    Kannst du mal testweise den direkten Code zum Datenaufbau vom Threadersteller nehmen und schauen, ob es damit geht?
    Das hab ich auch probiert aber es funktioniert nicht :/

    Java-Quellcode

    1. @Override protected void onStart() { super.onStart();
    2. SQLiteDatabase myDB = null; try{ myDB = this.openOrCreateDatabase("fang", MODE_PRIVATE, null); Cursor c = myDB.rawQuery("SELECT _id, " + "fangta, " + "geffi " + "FROM fang", null); startManagingCursor(c);
    3. getListView().setOnCreateContextMenuListener(this);
    4. final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.show_fish_frag, c, new String[] { "_id", "geffi", "fangta" }, new int[] { R.id.catched_fish, R.id.catched_day } );
    5. adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { @Override public boolean setViewValue(View view, Cursor theCursor, int column) { switch(view.getId()) { case R.id.catched_fish: final String ColNameFish = theCursor.getString(1); //Name ((TextView)view).setText(ColNameFish); return true; case R.id.catched_day: final String ColCatchday = theCursor.getString(2); //Fangdatum ((TextView)view).setText(ColCatchday); return true; } return false; } }); this.setListAdapter(adapter); }finally { if (myDB != null) myDB.close(); } }


    Das sieht im Quellcode so zusammengeklatscht aus warum?
  • Meckert er dann auch das Fehlen der Tabelle an?

    Das sieht im Quelltext vermutlich so hässlich aus, weil du den Standardeditor genommen hast. Der macht oftmals komische Dinge – leider. -.-
    Das Erstellen der Datenbank funktioniert auch ohne Probleme?
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«
  • Lucas de Vil schrieb:

    Meckert er dann auch das Fehlen der Tabelle an?

    Das sieht im Quelltext vermutlich so hässlich aus, weil du den Standardeditor genommen hast. Der macht oftmals komische Dinge – leider. -.-
    Das Erstellen der Datenbank funktioniert auch ohne Probleme?
    Ja ist das selbe leider :(
    ok komisch mit den editor.

    Das erstellen funktioniert ohne Probleme. Alles steht in der *.db file drin was reingehört.

    Ich kann dir ja mal die App per PM schicken damit du auch mal schauen kannst oder besser den code?
  • ChampS schrieb:

    wenn du dich mit datenbanken beschäftigst würde ich dir ein content provider tutorial empfehlen

    Empfehlungen sind nur dann welche, wenn auch konkret eine dabei steht. ;)
    Ich persönlich kenne nur dieses: vogella.com/articles/AndroidSQLite/article.html

    Aber ich persönlich würde ja sowieso so weit gehen, das Ganze über ein ORM-Wrapper auszulagern. Ich faule Sau. ;D
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«