SQL Datenbank abfrage mit Cursor und adapter

  • 4 Antworten
  • Letztes Antwortdatum
O

otX

Neues Mitglied
1
habe mir jetzt vorgenommen mich mit SQL db in Android zu beschäftigen.

bin soweit das ich Daten per text Eingabe und Button eintragen kann und TEILWEISE wieder auslesen kann.

db.class

Code:
private void ladeKlassen() {
		Cursor klassenCursor = 
				mDatenbank.rawQuery(DatenbankManager.KLASSEN_SELECT_RAW, null);

		startManagingCursor(klassenCursor);
		
		SimpleCursorAdapter klassenAdapter = 
				new SimpleCursorAdapter(
						this, 
						android.R.layout.simple_list_item_2, 
						klassenCursor, 
						new String[] {"name"}, 
						new int[] {android.R.id.text2}
					);
		
		setListAdapter(klassenAdapter);
	}
dbManager.class
Code:
public static final String KLASSEN_SELECT_RAW =
		"SELECT _id, name, nachname FROM klassen";
db.xml
Code:
<ListView
	    android:id="@+id/android:list"
	    android:layout_width="match_parent"
	    android:layout_height="wrap_content"
	    android:layout_weight="1" />

so wie oben beschrieben bekomme ich auch Folgendes ergebnis:
anna
anne
britta

änder ich diesen teil new String[] {"name"} in new String[] {"_id"} dieses ergebnis
1
2
3

änder ich diesen teil new String[] {"name"} in new String[] {"nachname"} dieses ergebnis
x
y
z

habe es auch schon so probiert new String[] {"_id", "name", "nachname"} was keine fehlermeldung gegeben hat aber leider auch nur dieses ergebnis
1
2
3

nun zur frage wie bekomme ich diese Ausgabe hin?
1 anna x
2 anne y
3 britta z

es ist bestimmt simpel aber ich verzweifel schon dran.
 
Zuletzt bearbeitet:
Dein ListView hat nur ein Feld pro Zeile dadurch wird immer nur der erste Wert (_id) angezeigt.
Du solltest entweder ein ListView mit mehreren Spalten (bzw. Zusatzzeilen) oder ein GridView nutzen, dann musst du nur "new int[] {android.R.id.wert1, android.R.id.wert2, android.R.id.wert3}" anpassen um auch die anderen Werte deiner Abfrage anzuzeigen.
 
Danke erst mal an perpe!

perpe schrieb:
Dein ListView hat nur ein Feld pro Zeile dadurch wird immer nur der erste Wert (_id) angezeigt.
Du solltest entweder ein ListView mit mehreren Spalten (bzw. Zusatzzeilen) ...... nutzen, ......

das habe so verstanden
Code:
private void ladeKlassen() {
		Cursor klassenCursor = 
				mDatenbank.rawQuery(DatenbankManager.KLASSEN_SELECT_RAW, null);

		startManagingCursor(klassenCursor);
		
		SimpleCursorAdapter klassenAdapter = 
				new SimpleCursorAdapter(
						this, 
						android.R.layout.simple_list_item_2, 
						klassenCursor, 
						new String[] {"_id","name","nachname"}, 
						new int[] {android.R.id.text1,android.R.id.text2}
					);
		
		setListAdapter(klassenAdapter);
	}

das wirft mir auch schon mal 2 ergebnisse aus aber leider auch nicht ganz richtig
1
anna
2
anne
3
britta

also der teil mit dem GridView!
Code:
private void ladeKlassen() {
		Cursor klassenCursor = 
				mDatenbank.rawQuery(DatenbankManager.KLASSEN_SELECT_RAW, null);

		startManagingCursor(klassenCursor);
		
		SimpleCursorAdapter klassenAdapter = 
				new SimpleCursorAdapter(
						this, 
						R.layout.mygridview, 
						klassenCursor, 
						new String[] {"_id","name"}, 
						new int[] {android.R.id.text1,android.R.id.text2}
					);
		
		setListAdapter(klassenAdapter);
	}

mygridview.xml
Code:
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10px"
    android:verticalSpacing="10px"
    android:horizontalSpacing="10px"
    android:numColumns="3"
    android:columnWidth="100px"
    android:stretchMode="columnWidth"
    android:gravity="center"
    />

das ergab eine leer seite !! aber halt selbst die wahnung "Keine Daten gefunden" ist nicht da also im GridView
Code:
android:background="@drawable/bg_box"
und im drawable/bg_box
Code:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="135"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="12dp" />
</shape>

das ergebnis sind 3 bunte balken also denke ich es liegt an folgender zeile
Code:
new int[] {android.R.id.text1,android.R.id.text2}

Ist mein ansatz richtig?
ist meine fehlersuche richtig?
und wie kann ich es richten?

danke schön
 
Mach es mal mit der ListView, das vorgehen mit einer GridView ist dann zwar ähnlich, aber die ListView ist die richtigere Wahl.

Du musst für deine Zeile eine eigenes layout erstellen, z.B.
row.xml
Code:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">
 
     <TextView android:id="@+id/ID_CELL"
         android:layout_width="70dip"
         android:layout_height="wrap_content"/>
 
     <TextView android:id="@+id/NAME_CELL"
         android:layout_width="70dip"
         android:layout_height="wrap_content" 
         android:layout_weight="1"/>
 
     <TextView android:id="@+id/NACHNAME_CELL"
         android:layout_width="70dip"
         android:layout_height="wrap_content"
         android:layout_weight="1"/>
</LinearLayout>
Mit horizontal als android.orientation wird das Layout waagrecht ausgerichtet.

Das kannst du dann in deinem SimpleCursorAdapter laden.
Code:
SimpleCursorAdapter klassenAdapter = 
				new SimpleCursorAdapter(
						this, 
						R.layout.row, 
						klassenCursor, 
						new String[] {"_id","name","nachname"}, 
						new int[] {R.id.ID_CELL, R.id.NAME_CELL, R.id.NACHNAME_CELL}
	);
 
Ja Genau so!

Danke! @ perpe
 
Zurück
Oben Unten