1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

DBquery in ListView ausgeben

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Lauda, 26.01.2012.

  1. Lauda, 26.01.2012 #1
    Lauda

    Lauda Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    26.01.2012
    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: 26.01.2012
  2. swordi, 26.01.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    wenns einen absturz gibt, warum postet dann die meldung nicht hier rein ? => logcat
     
  3. Lauda, 26.01.2012 #3
    Lauda

    Lauda Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    26.01.2012
    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
     
  4. swordi, 26.01.2012 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    hmm da gibts doch sicher mehr als den kleinen Ausschnitt...
     
  5. Lauda, 26.01.2012 #5
    Lauda

    Lauda Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    26.01.2012
    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) {


    }

    }
     
  6. Lauda, 27.01.2012 #6
    Lauda

    Lauda Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    26.01.2012
    Push
     
  7. swordi, 27.01.2012 #7
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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 )
     
    Lauda bedankt sich.
  8. Lauda, 27.01.2012 #8
    Lauda

    Lauda Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    0
    Registriert seit:
    26.01.2012
    Vielen Dank. Ich werde deinen Vorschlag später testen und mich ggf. nochmal melden.
    Gruß
     

Diese Seite empfehlen