DBquery in ListView ausgeben

L

Lauda

Neues Mitglied
0
Hallo,
habe ein Problem mit dem im Titel beschriebenen Thema. Ich frage eine bisher leere Tabelle ab. Die Activity die aufgerufen wird, soll demnach eine leere Liste anzeigen, allerdings stürtzt die Anwendung beim ausführen der App ab.

XML:

<ListView
android:id="@android:id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"

/>
<TextView
android:id="@+android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tx_data_database_empty"

/>

ListActivity:

package niklaskasper.TrainLog.Basics;

import niklaskasper.TrainLog.Daten.DatabaseManager;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class TrainingSchedule extends ListActivity {

private SQLiteDatabase sDatabase;
private DatabaseManager sHelper;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trainingschedule);
sHelper = new DatabaseManager(this);


}



@Override
protected void onPause() {
sDatabase.close();
Toast.makeText(this, getResources().getString(R.string.tx_database_close), Toast.LENGTH_SHORT).show();
super.onPause();
}



@Override
protected void onResume() {
super.onResume();
sDatabase = sHelper.getReadableDatabase();
Toast.makeText(this, getResources().getString(R.string.tx_database_open), Toast.LENGTH_SHORT).show();


Cursor scheduleCursor = sDatabase.query("trainingSchedules", new String[]{
"_id","name"},null,null,null,null,null);

this.startManagingCursor(scheduleCursor);

String[] columns = new String[] {"_id"};
int[] to = new int[] { android.R.id.text1 };

SimpleCursorAdapter scheduleAdapter =
new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, scheduleCursor, columns, to);

this.setListAdapter(scheduleAdapter);

}



public void back(final View view){
startActivity(new Intent(this, MainActivity.class));
sDatabase.close();
Toast.makeText(this, getResources().getString(R.string.tx_database_close), Toast.LENGTH_SHORT).show();
finish();
}


}

Ich finde den Fehler leider nicht. Habe mir schon verschiedene Tutorials zu dem Thema durchgelesen, aber ich sehe den Fehler nicht.
Dazu ist zu sagen, das die Anwendung nicht abbricht, wenn ich diesen Teil auskommentiere:

SimpleCursorAdapter scheduleAdapter =
new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, scheduleCursor, columns, to);

this.setListAdapter(scheduleAdapter);

Gruß
Lauda
 
Zuletzt bearbeitet:
wenns einen absturz gibt, warum postet dann die meldung nicht hier rein ? => logcat
 
01-27 13:26:28.718: E/AndroidRuntime(313): at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:84)
01-27 13:26:28.718: E/AndroidRuntime(313): at niklaskasper.TrainLog.Basics.TrainingSchedule.onResume(TrainingSchedule.java:56)
01-27 13:26:28.718: E/AndroidRuntime(313): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
01-27 13:26:28.718: E/AndroidRuntime(313): at android.app.Activity.performResume(Activity.java:3823)
01-27 13:26:28.718: E/AndroidRuntime(313): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
01-27 13:26:28.718: E/AndroidRuntime(313): ... 12 more
 
hmm da gibts doch sicher mehr als den kleinen Ausschnitt...
 
01-27 14:20:06.668: I/Database(308): sqlite returned: error code = 1, msg = no such column: _id
01-27 14:20:06.688: D/AndroidRuntime(308): Shutting down VM
01-27 14:20:06.698: W/dalvikvm(308): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-27 14:20:06.768: E/AndroidRuntime(308): FATAL EXCEPTION: main
01-27 14:20:06.768: E/AndroidRuntime(308): java.lang.RuntimeException: Unable to resume activity {niklaskasper.TrainLog.Basics/niklaskasper.TrainLog.Basics.TrainingSchedule}: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, name FROM trainingSchedules
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3128)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.os.Looper.loop(Looper.java:123)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-27 14:20:06.768: E/AndroidRuntime(308): at java.lang.reflect.Method.invokeNative(Native Method)
01-27 14:20:06.768: E/AndroidRuntime(308): at java.lang.reflect.Method.invoke(Method.java:521)
01-27 14:20:06.768: E/AndroidRuntime(308): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-27 14:20:06.768: E/AndroidRuntime(308): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-27 14:20:06.768: E/AndroidRuntime(308): at dalvik.system.NativeStart.main(Native Method)
01-27 14:20:06.768: E/AndroidRuntime(308): Caused by: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, name FROM trainingSchedules
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
01-27 14:20:06.768: E/AndroidRuntime(308): at niklaskasper.TrainLog.Basics.TrainingSchedule.onResume(TrainingSchedule.java:46)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.Activity.performResume(Activity.java:3823)
01-27 14:20:06.768: E/AndroidRuntime(308): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
01-27 14:20:06.768: E/AndroidRuntime(308): ... 12 more
01-27 14:20:09.820: I/Process(308): Sending signal. PID: 308 SIG: 9

DatabaseManager:

public class DatabaseManager extends SQLiteOpenHelper {

private static final String DB_NAME = "trainLog.db";
private static final int DB_VERSION = 1;

private static final String TRAINING_SCHEDULES_CREATE =
"CREATE TABLE trainingSchedules (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT NOT NULL,"+
"startDate TEXT,"+
"endDate TEXT"+
")";

public DatabaseManager(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TRAINING_SCHEDULES_CREATE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


}

}
 
Push
 
so,

die fehlermeldung sagt, "no such column _id"

da liegt es mal nahe, dass ihm die spalte _id fehlt.

da du _id ja jetzt in deinem sql create statement hast, bleibt die frage offen, ob das schon immer so war?

ich vermute mal nicht und du hast es nachträglich hinzugefügt, die app aber nicht komplett neu installiert ( das create statement wird nur beim erstmaligen erstellen ausgeführt - danach müsstest du über das onUpgrade die tabellenstruktur mittels alter table statement ändern )
 
  • Danke
Reaktionen: Lauda
Vielen Dank. Ich werde deinen Vorschlag später testen und mich ggf. nochmal melden.
Gruß
 

Ähnliche Themen

Muecke1982
Antworten
8
Aufrufe
1.034
Skyhigh
Skyhigh
A
Antworten
10
Aufrufe
1.021
swa00
swa00
D
Antworten
23
Aufrufe
2.533
Data2006
D
Zurück
Oben Unten