- Forum-Beiträge: 876
21.04.2014, 17:08:04 via Website
21.04.2014 17:08:04 via Website
Hallo zusammen!
ich bin gerade dabei, mich in die Android App Programmierung einzuarbeiten. Als Hilfe nutze ich das Buch "Android-Apps programmieren" von Dirk Koller und bin gerade dabei die Beispielapp nachzuprogrammieren.
Dort wird gesagt das sich die Datenbank meiner App unter /data/data/PAKETNAME/databases befindet. Der Ordner data ist aber einfach leer. Um die Datenbanken zu entwerfen habe ich eine Klasse [1], die von SQLiteOpenHelper erbt. In dessen onCreate Methode habe ich dann mit db.execSQL("CREATE......") die Datenbanken definiert. Dann habe ich eine weitere Klasse [2] von Application abgeleitet und diese dann im Manifest eingetragen, sodass sie beim Start instanziiert wird. Darin erstelle ich eine Instanz der eben genannten Klasse, sodass deren onCreate Methode aufgerufen und somit die Datenbanken erstellt werden (sollten?).
Hier noch die beiden Klassen (Am Beispiel einer Tabelle):
[1]
public class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context ctx){
super(ctx, "chronos.db", null, 2);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE kunden ("+
" _id INTEGER PRIMARY KEY AUTOINCREMENT, "+
" bemerkung TEXT,"+
" name TEXT NOT NULL);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS kunden");
onCreate(db);
}
}
}
[2]
public class Chronos extends Application{
private static SQLiteOpenHelper openHelper;
@Override
public void onCreate(){
super.onCreate();
openHelper = new DatabaseHelper (this);
Chronos.getWritableDatabase().execSQL("PRAGMA foreign_keys=ON;");
}
public static SQLiteDatabase getWritableDatabase(){
return openHelper.getWritableDatabase();
}
public static SQLiteDatabase getReadableDatabase(){
return openHelper.getReadableDatabase();
}
}
Dann habe ich eine Activity (ListActivity), um Einträge aus dieser Datenbank anzuzeigen:
public class KundenListActivity extends ListActivity{
private static final String TAG ="KundenListActivity";
private static String[] FROM = {"name", "bemerkung"};
private static int[] TO = {android.R.id.text1, android.R.id.text2};
private static String ORDER_BY = "name DESC";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(TAG, "created");
this.setTitle("Kunden");
Cursor cursor = Chronos.getWritableDatabase().query("kunden", FROM, null, null, null, null, ORDER_BY);
Log.d(TAG, "Cursor erstellt");
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, cursor, FROM, TO, 1);
Log.d(TAG, "Adapter erstellt");
setListAdapter(adapter);
Log.d(TAG, "Adapter gesetzt");
}
Dort kommt er bis zum erstellen des Cursors, die Logmeldung Adapter erstellt wird nicht mehr angezeigt, sondern es kommen nur noch ganz viele Fehlermeldungen und die App stürzt ab. Die erste meint, dass die Spalte _id nicht existiert. Aber ich habe sie doch erstellt? Habe auch schon Daten eingefügt über Chronos.getWritableDatabase.execSQL("INSERT....").
Ich weiß echt nicht wo der Fehler liegt. Hoffe ich habe es ausführlich genug erklärt sodass ihr mir hoffentlich weiterhelfen könnt
Würde auch gerne wissen wo die Datenbanken abgespeichert werden.
Tutorial flashen der 2.3.6 JW1 + rooten -- GoaTrip 5.0 flashen --- Lg Jogu
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.