2012-04-06 12 views
1

Ich versuche eine Klasse zu starten, die nach Informationen in einer Datenbank sucht und sie dann auf dem Bildschirm anzeigt. es funktioniert gestern bis ich in Code hinzugefügt, um es Informationen in einer zweiten Tabelle zu überprüfen i sowohl nach dem Code werde und die logcat wie ich weiß nicht, warum dieseAndroid Klassen funktionieren nicht

public class WorkoutProgress extends ListActivity { 

    private DataBaseHelper datasource; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    /*requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);*/ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.progress); 

    datasource = new DataBaseHelper(this); 
    datasource.open(); 
    fillData(); 
    datasource.close(); 
    } 
    private void fillData() { 
    // Get all of the notes from the database and create the item list 
    Cursor c = datasource.getAllTitles(); 
    startManagingCursor(c); 

    String[] from = new String[] {DataBaseHelper.KEY_CODE, DataBaseHelper.KEY_DAYS,DataBaseHelper.KEY_BMI }; 
    int[] to = { R.id.code, R.id.Days, R.id.BMI }; 
    String[] from2 = new String[] {DataBaseHelper.KEY_DATE, DataBaseHelper.KEY_STEPS,DataBaseHelper.KEY_CALs }; 
    int[] to2 = { R.id.date, R.id.steps, R.id.cals }; 
    // Now create an array adapter and set it to display using our row 
    SimpleCursorAdapter notes = 
    new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to); 
    setListAdapter(notes); 
    SimpleCursorAdapter notes2 = 
     new SimpleCursorAdapter(this, R.layout.notes_row, c, from2, to2); 
    setListAdapter(notes); 
    } 

    public void add(View view) { 
    //Do nothing 
    } 

    public void delete(View view) { 
    datasource.open(); 
    datasource.deleteFirst(); 
    fillData(); 
    datasource.close(); 
    } 
} 

und das Protokoll Katze geschieht, wenn ich versuche zu Zugriff auf diese Klasse ist

04-06 01:10:42.293: E/global(22219): java.lang.UnsupportedOperationException 
04-06 01:10:42.293: E/global(22219): at java.lang.VMThread.stop(VMThread.java:85) 
04-06 01:10:42.293: E/global(22219): at java.lang.Thread.stop(Thread.java:1391) 
04-06 01:10:42.293: E/global(22219): at java.lang.Thread.stop(Thread.java:1356) 
04-06 01:10:42.293: E/global(22219): at com.b00348312.workout.Splashscreen$1.run(Splashscreen.java:42) 
04-06 01:10:45.393: I/Database(22219): sqlite returned: error code = 1, msg = AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY 
04-06 01:10:45.393: E/Database(22219): Failure 1 (AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY) on 0x2c0e38 when preparing 'create table goals (_id primary key autoincrement, code text not null,days title text not null, bmi text not null);'. 
04-06 01:10:45.403: D/AndroidRuntime(22219): Shutting down VM 
04-06 01:10:45.403: W/dalvikvm(22219): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
04-06 01:10:45.453: D/dalvikvm(22219): GC_FOR_MALLOC freed 4012 objects/253248 bytes in 32ms 
04-06 01:10:45.453: E/AndroidRuntime(22219): FATAL EXCEPTION: main 
04-06 01:10:45.453: E/AndroidRuntime(22219): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.b00348312.workout/com.b00348312.workout.WorkoutProgress}: android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY: create table goals (_id primary key autoincrement, code text not null,days title text not null, bmi text not null); 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.app.ActivityThread.access$2300(ActivityThread.java:135) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.os.Looper.loop(Looper.java:144) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.app.ActivityThread.main(ActivityThread.java:4937) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at java.lang.reflect.Method.invoke(Method.java:521) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at dalvik.system.NativeStart.main(Native Method) 
04-06 01:10:45.453: E/AndroidRuntime(22219): Caused by: android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY: create table goals (_id primary key autoincrement, code text not null,days title text not null, bmi text not null); 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1817) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at com.b00348312.workout.DataBaseHelper$DatabaseHelper.onCreate(DataBaseHelper.java:59) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at com.b00348312.workout.DataBaseHelper.open(DataBaseHelper.java:78) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at com.b00348312.workout.WorkoutProgress.onCreate(WorkoutProgress.java:21) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069) 
04-06 01:10:45.453: E/AndroidRuntime(22219): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751) 
04-06 01:10:45.453: E/AndroidRuntime(22219): ... 11 more 

Antwort

3

Der Stack-Trace sagt:

Failure 1 (AUTOINCREMENT nur auf einem INTEGER PRIMARY KEY erlaubt ist) auf 0x2c0e38 wenn ‚create table Ziel Vorbereitung s (_id Primärschlüssel autoincrement, Codetext nicht null, Tage Titeltext nicht null, bmi Text nicht null); '.

Es sieht aus wie Sie das _id Feld als INTEGER in Ihrer create table Aussage zu erklären, vergessen.

+1

+1. Ich wünschte wirklich, dass neue Programmierer lernen würden, tatsächlich ** Fehlermeldungen zu lesen, anstatt nur "Mein Code funktioniert nicht. Hier ist die Fehlermeldung. Was ist los?" Dieser ist wirklich klar. –

+0

@ Ken weiß, sorry, aber ich bin noch nicht in Logcat versiert. Ich habe es nur wirklich benutzt und ich war mir nicht sicher, auf welche Fehler ich achten sollte. jetzt nach der Umsetzung dieser Änderungen habe ich noch ein Problem, aber es sagt, dass es keine Spalte gibt, wenn ich es klar definiert habe / –

0

Möglicherweise hat Ihr DataBaseHelper den Typ der Spalte _ID bei der Datenbankerstellung nicht angegeben. Sie müssen es als INTEGER definieren.

0

Ich habe gerade mit der Android-Programmierung begonnen und benutze das USB-Debugging, um meine Apps auszuprobieren. Ich habe festgestellt, dass nach einem möglichen SQL-Fehler die Datenbank beim nächsten Ausführen nicht von Ihrem Gerät gelöscht wird und alle vorgenommenen Änderungen nicht wirksam werden.

Also sagen Sie Ihre SQL-Anweisung "create table" war in irgendeiner Weise falsch. Dein Programm stürzt ab. Sie finden das Problem und beheben es. Wenn Sie Ihr Programm erneut ausführen, wird dieselbe alte Datenbank verwendet, es sei denn, Sie erhöhen die Version.

Also gehen Sie auf Ihr Gerät und deinstallieren Sie das Programm, dann starten Sie es erneut von Ihrem Computer. Diesmal denke ich, dass die Datenbank mit Ihrer neuen "create table" SQL neu erstellt wird.

Da ich neu bin, könnte dies nicht sein, was passiert und ich bin offen für die Korrektur, wenn das so ist.

Verwandte Themen