| |||||||
Das Thema "SimpleCursorAdapter anstatt ArrayAdapter benutzen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android-Hilfe.de Mitglied | Hier mein Quelltext Code: public class fahrzeuge extends ListActivity {
SQLiteDatabase myDB = null;
ArrayList<String> results = new ArrayList<String>();
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
myDB = this.openOrCreateDatabase(ensacom1.MY_DATABASE_NAME, MODE_PRIVATE, null);
Cursor c = myDB.rawQuery("SELECT id, name, model FROM " + ensacom1.MY_DATABASE_TABLE + ";", null);
int kfzIDColumn = c.getColumnIndex("id");
int kfzNameColumn = c.getColumnIndex("name");
int kfzModelColumn = c.getColumnIndex("model");
startManagingCursor(c);
c.moveToFirst();
if (c != null) {
if (c.isFirst()) {
int i = 0;
do {
i++;
String kfzid = c.getString(kfzIDColumn);
String kfzname = c.getString(kfzNameColumn);
String kfzmodel = c.getString(kfzModelColumn);
results.add(kfzid + ": "+ kfzname + " - " + kfzmodel);
} while(c.moveToNext());
}
}
this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
}
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 |
| | |
| | #2 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Wo hakt es denn? Ich würde einfach etwas wie folgt machen: (ungetester Code) Code: SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item1, cursor, new String[]{BaseColumns._ID}, new String[]{android.R.id.text1});
adapter.setCursorToStringConvert(new CursorToStringConverter(){
public CharSequence convertToString(Cursor theCursor)
{
String aColumnString = theCursor.getString(1);
String bColumnString = theCursor.getString(2);
return aColumnString + "," +bColumnString;
}
}); |
| | |
| | #3 (permalink) |
| Android-Hilfe.de Mitglied |
Wo es hackt? Es hackt bereits daran dass ich nicht genau weiß wo ich das einfügen soll. CursorToStringAdapter kennt er gar nicht. Ich habe ja in meinem Beispiel alle Einträge aus der Datenbank in einem array stehen das ich nun an die Liste übergeben muss. Wie ich das sehe muss ich bei SimpleCursorAdapter 2 Strings übergeben, wobei ich auch nicht weiß was BaseColumns._ID sein soll
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 |
| | |
| | #4 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Hier die komplette Klasse, ich hoffe es hilft weiter. Sonst musst Du nochmal nachfragen: Code: package de.friedger.a.test;
import java.util.ArrayList;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.widget.SimpleCursorAdapter;
import android.widget.SimpleCursorAdapter.CursorToStringConverter;
public class Fahrzeuge extends ListActivity {
SQLiteDatabase myDB = null;
ArrayList<String> results = new ArrayList<String>();
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
myDB = this.openOrCreateDatabase("mydb", MODE_PRIVATE, null);
Cursor c = myDB.rawQuery("SELECT id, name, model FROM " + "myTable"
+ ";", null);
startManagingCursor(c);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, c,
new String[] { BaseColumns._ID },
new int[] { android.R.id.text1 });
adapter.setCursorToStringConverter(new CursorToStringConverter() {
public CharSequence convertToString(Cursor theCursor) {
String aColumnString = theCursor.getString(1);
String bColumnString = theCursor.getString(2);
return aColumnString + "," + bColumnString;
}
});
this.setListAdapter(adapter);
}
} |
| | |
| | #5 (permalink) |
| Android-Hilfe.de Mitglied |
Also gleich beim AUfrufen der activity stürzt sie ab mit unbekanntem Fehler Was hat es mit der zeile auf sich? Code: new int[] { android.R.id.text1 }); Eine layout.xml brauche ich ja nicht da das Layout hier direkt im code erzeugt wird oder?
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 Geändert von ensacom (21.05.2009 um 12:34 Uhr) |
| | |
| | #6 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Wie kommst Du darauf? LogCat sagt bestimmt was anderes. Der CursorAdapter verlangt nämlich, dass es eine Spalte "_id" gibt. Also jetzt habe ich den Code auch getestet: Code:
package de.friedger.test;
import java.util.ArrayList;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.view.View;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.SimpleCursorAdapter.CursorToStringConverter;
import android.widget.SimpleCursorAdapter.ViewBinder;
public class Fahrzeuge extends ListActivity {
SQLiteDatabase myDB = null;
ArrayList<String> results = new ArrayList<String>();
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
myDB = this.openOrCreateDatabase("mydb2", MODE_PRIVATE, null);
myDB.execSQL("CREATE TABLE IF NOT EXISTS " + "myTable"
+ " (_id integer AUTO_INCREMENT PRIMARY KEY, name varchar(100), model varchar(100), bemerkungen varchar(255), kraftstoffart varchar(100))"
+";");
myDB.execSQL("INSERT INTO "+"myTable"+" (name, model, bemerkungen, kraftstoffart) "
+"VALUES ('Audi','TT','Keine Bemerkung','Super');");
Cursor c = myDB.rawQuery("SELECT _id, name, model FROM " + "myTable"
+ ";", null);
startManagingCursor(c);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, c,
new String[] { "_id" },
new int[] { android.R.id.text1 });
adapter.setViewBinder(new ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor theCursor, int column) {
String aColumnString = theCursor.getString(1);
String bColumnString = theCursor.getString(2);
((TextView)view).setText(aColumnString + "," + bColumnString);
return true;
}
});
this.setListAdapter(adapter);
}
} |
| | |
| | #7 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Und das mit dem CursorToStringConverter war Quatsch von mir. ViewBinder wird hier gebraucht! Der Converter wird zum Beispiel beim AutoCompletion verwendet. |
| | |
| | #8 (permalink) |
| Android-Hilfe.de Mitglied |
Super, also das funktioniert jetzt. Nur wie kann ich nun nach anklicken eines Eintrages in der Liste die ID auslesen? Die will ich dann nämlich zum abfragen weiterer Daten aus der DB benutzen.
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 |
| | |
| | #9 (permalink) |
| Erfahrener Benutzer Registriert seit: 15.01.2009
Beiträge: 223
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
|
Siehe anderer Thread. Schau Dir mal ein paar Beispiele aus den Samples an. Da kann man sich viel Code herauskopieren.
|
| | |
| | #10 (permalink) |
| Android-Hilfe.de Mitglied |
Ja aber nur wenn man schon was mit Java gemacht hat. Nur noch eine Frage die nur zum Teil mit dem Thema zu tun hat. Kann man eine durch das Programm erstellte Datenbank nicht mehr löschen? Habe es schon versucht mit myDB.execSQL("DROP DATABASE TankPro;"); worauf das Programm aber gleich wieder abstürzt
__________________ HTC-Magic white Development: Eclipse Ganymede + Android SDK 1.5 Linux Mint 6 |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| G1 Sim-Kontakte anzeigen/benutzen | Sonnenschein | T-Mobile G1 Forum | 2 | 18.01.2010 20:40 |
| Google g1 als Modem benutzen... | GO4 | T-Mobile G1 Forum | 2 | 01.02.2009 14:01 |