2012-04-06 7 views
1

데이터베이스의 정보를 확인한 다음 화면에 표시하는 클래스를 실행하려고합니다. 그것은 내가하려고 할 때이Android 클래스가 작동하지 않습니다.

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(); 
    } 
} 

및 로그 고양이 일어나고있는 이유를 잘 모릅니다으로 내가 코드와 로그 캣 모두를 게시 할 예정입니다 두 번째 테이블에서 정보를 확인하기 위해 내가 코드를 추가 전까지는 어제 일하는 액세스이 클래스는

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 

답변

3

스택 추적은 말한다 :

실패 1 표 목표를 만들 '준비 할 때 0x2c0e38에 (AUTOINCREMENT는 단지 INTEGER PRIMARY KEY 허용됩니다) (_id 기본 키 자동 증가, 코드 텍스트가 널이 아님, 일 제목 텍스트가 널이 아니요, bmi 텍스트 이 아님); '. 당신이 당신의 create table 문에 INTEGER_id 필드를 선언하는 것을 잊었다처럼

는 것 같습니다.

+1

+1. 새로운 프로그래머가 ** 실제로 ** ** 오류 메시지를 읽는 것을 배우기를 바랍니다. "내 코드가 작동하지 않습니다. 여기에 오류 메시지가 있습니다. 무엇이 잘못 되었나요?" 이건 정말 분명합니다. –

+0

@ Ken White, 미안하지만 나는 아직 logcat에 정통하지 않습니다. 나는 단지 그것을 사용하기 시작했고 나는 어떤 오류를 찾아야할지 확신하지 못했습니다. 지금은 이러한 변경 사항을 구현 한 후에도 여전히 문제가 있지만 명확하게 정의했을 때 열이 없다는 것을 말합니다. –

0

데이터베이스 작성시 DataBaseHelper가 _ID 열의 유형을 지정하지 않았을 수 있습니다. INTEGER으로 정의해야합니다.

0

방금 ​​Android 프로그래밍을 시작했으며 USB 디버깅을 사용하여 내 앱을 시험해 보았습니다. 가능한 SQL 오류가 발생하면 다음 번에 데이터베이스를 실행할 때 데이터베이스가 사용자의 장치에서 지워지지 않으며 변경 한 내용이 적용되지 않는다는 것을 깨달았습니다.

그래서 "create table"SQL 문이 어떤 식 으로든 잘못되었다고합니다. 프로그램이 충돌합니다. 문제를 찾아 수정하십시오. 프로그램을 다시 실행하면 버전을 늘리지 않는 한 동일한 이전 데이터베이스가 사용됩니다.

장치에 가서 프로그램을 제거한 다음 컴퓨터에서 다시 실행하십시오. 이번에는 새로운 "create table"SQL을 사용하여 데이터베이스가 다시 만들어 질 것이라고 생각합니다.

전 신생 이래로 이런 일이 일어나지 않았을 수 있습니다. 그렇다면 수정이 가능합니다.

관련 문제