Spinner mit Elementen aus einer Datenbank füllen

P

Prengepower

Ambitioniertes Mitglied
0
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!
 
indem Du group by anstat von distinct verwendest.
 
Mmh und wie soll ich das dann auswerten?
Hab noch nie mit Group By gearbeitet..
 
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;
 
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?
 
Du verwendest doch ein Array-Adapter, der ist für die Sortierung verantwortlich.
 
garak schrieb:
Du verwendest doch ein Array-Adapter, der ist für die Sortierung verantwortlich.

Öhm das verstehe ich jetzt net so ganz recht !?
 
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.
 
  • Danke
Reaktionen: Prengepower
Coole Sache hat geklappt - Danke ;) :)
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.673
Sempervivum
S
D
  • Data2006
Antworten
14
Aufrufe
487
jogimuc
J
R
  • Robby1950
2
Antworten
23
Aufrufe
1.016
Robby1950
R
Zurück
Oben Unten