Spinner mit Elementen aus einer Datenbank füllen

  • 8 Antworten
  • Neuester Beitrag
Diskutiere Spinner mit Elementen aus einer Datenbank füllen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
P

Prengepower

Ambitioniertes Mitglied
Hey!

In meiner Datenbank gibt es die Spalte 'date' in der das Datum als String gespeichert ist. Mein Spinner soll alle Daten anzeigen, allerdings keine doppelt.

Ich habe jetzt folgende Abfrage um den Cursor zu bekommen:
Code:
	public Cursor fetchDates(){
		Date now = new Date();
		Integer year = now.getYear();
		Integer month = now.getMonth();
		Integer day = now.getDate();
		
		Long datetime = (new Date(year, month, day)).getTime();
		
		return database.rawQuery("SELECT  DISTINCT "+ KEY_DATE+", "+KEY_ROWID+" FROM "+ DATABASE_TABLE+" WHERE "+KEY_BEGIN+">="+datetime.toString()+" AND "+KEY_SHOW+"=1 ORDER BY "+KEY_BEGIN+" ASC", null);
	}
Das funktioniert auch soweit, allerdings nur, wenn ich die ROWID mit ausgebe. Sobald ich das weglasse - was ich ja machen müssten, damit das DISTINCT Wirkung zeigt, bekomme ich einen Fehler, dass der Spinner keine ROWID findet -.-

Hier noch der Code wo ich den Spinner fülle:
Code:
	private void fillSpinner(){
		cursorDate = mDbAdapter.fetchDates();
		startManagingCursor(cursorDate);
		
		Spinner dateSpinner = (Spinner) findViewById(R.id.spinnerDate);

		String[] from = new String[] { DatabaseAdapter.KEY_DATE };
		int[] to = new int[] { android.R.id.text1 };
				
		// Now create an array adapter and set it to display using our row
		SimpleCursorAdapter spinneradapt = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursorDate, from, to);
		
		spinneradapt.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        dateSpinner.setAdapter(spinneradapt);
        dateSpinner.setPrompt(this.getResources().getString(R.string.spinnerPrompt)); 
        dateSpinner.setAdapter(spinneradapt);
	}
Wie kann ich das beheben?

Danke!
 
M

mago

Neues Mitglied
indem Du group by anstat von distinct verwendest.
 
P

Prengepower

Ambitioniertes Mitglied
Mmh und wie soll ich das dann auswerten?
Hab noch nie mit Group By gearbeitet..
 
M

mago

Neues Mitglied
Ich hab das mal mit einem Table ausprobiert, den ich in einer Datenbank habe.

Hoffentlich wird es damit klarer.

Code:
select _id, logDate from logentry group by logDate order by _id;
 
P

Prengepower

Ambitioniertes Mitglied
Danke für deine Hilfe! Hab es aber jetzt auch auf einem anderen Weg hinbekommen.
Mein Problem ist jetzt allerdings noch, dass meine Einträge im Spinner nach dem ersten Buchstaben sortiert sind. Ich kann meine Sortierung ändern wie ich will, aber das hilft nichts..

Lässt sich das irgendwie abstellen?
 
garak

garak

Ehrenmitglied
Du verwendest doch ein Array-Adapter, der ist für die Sortierung verantwortlich.
 
P

Prengepower

Ambitioniertes Mitglied
garak schrieb:
Du verwendest doch ein Array-Adapter, der ist für die Sortierung verantwortlich.
Öhm das verstehe ich jetzt net so ganz recht !?
 
garak

garak

Ehrenmitglied
Momentan hast du einen SimpleCursorAdapter zum Einsatz gebracht (also im Prinzip einen Array-Adapter), der die Daten aus der Tabelle liest und dem Spinner zur Verfügung stellt. Sortierung inklusive. Anstelle dessen kannst du direkt den Array-Adapter nehmen, die Daten holen, umsortieren und dem Spinner geben. Oder eine andere Möglichkeit, überschreiben die Klasse SimpleCursorAdapter und ändere dort die Methode ab, um die Daten umzusortieren. Was einfacheres fällt mir gerade nicht ein. Sortierung in der Datenbankabfrage hattest du ja probiert.
 
P

Prengepower

Ambitioniertes Mitglied
Coole Sache hat geklappt - Danke ;) :)