안녕하세요? 안드로이드 개발 초짜입니다 ㅠㅠ 제가 연구하다하다 너무 안 되서 이렇게 글을 올립니다...
지금 있는 Column ID가 BUSLINNUM, NAME... 등등이 있는데요
제가 하고 싶은건 BUSLINENUM 에 값을 주어 NAME 들을 모두 ListView로 표시하는 것입니다...
소스입니다 ㅠ
mHelper = new BusDBHelper(this);
Cursor cursor;
SQLiteDatabase db = mHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM bus WHERE BUSLINENUM=126", null);
startManagingCursor(cursor);
SimpleCursorAdapter Adapter = null;
Adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor, new String[] { "NAME"},
new int[] { android.R.id.text1});
ListView list = (ListView)findViewById(R.id.list);
list.setAdapter(Adapter);
인데, 앱 실행에서 unExpect 에러가 뜹니다...
어떤 분 말 보니까 _id 가 뭐 꼭 있어야 커서어뎁터를 쓸수 있다고 하신것도 있던데...
_id라는게 뭐를 말하는건지 잘 모르겠습니다 ㅠㅠ 답변 부탁드립니다 ㅠㅠㅠ
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): java.lang.RuntimeException: Unable to start activity ComponentInfo{pack.WakeUpMe/pack.WakeUpMe.NumSearch}: android.database.sqlite.SQLiteException: no such table: bus: , while compiling: SELECT * FROM bus WHERE BUSLINENUM=126
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.os.Handler.dispatchMessage(Handler.java:99)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.os.Looper.loop(Looper.java:123)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.app.ActivityThread.main(ActivityThread.java:4363)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at java.lang.reflect.Method.invokeNative(Native Method)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at java.lang.reflect.Method.invoke(Method.java:521)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at dalvik.system.NativeStart.main(Native Method)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): Caused by: android.database.sqlite.SQLiteException: no such table: bus: , while compiling: SELECT * FROM bus WHERE BUSLINENUM=126
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1221)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1194)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at pack.WakeUpMe.NumSearch.onCreate(NumSearch.java:39)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
12-01 15:23:24.575: ERROR/AndroidRuntime(11780): ... 11 more
로그캣이 이렇습니다... ㅠㅠ 디비 테이블도 보여드릴까요??
테이블 없다는데요.
adb shell
cd /data/data/패키지이름/databases
sqlite3 디비이름
테이블 있는지 체크 해보세요.
앱을 배포할거라면. 디비를 assets 에 넣고 프로그램 실행시 파일 체크 한후에 디비없으면
파일 복사해주는 방법도 있습니다.
실행시 체크해서 병합해서 넣는 방법도 있습니다.
단순히 테스트만 하실거라면
파일을 정확한 위치에 넣어주기만 하면됩니다.
넣은후에 쉘로 확인해보세요
sqlite3 디비명
.table
또 이게 웃긴게... SELECT문 검사하고 나서
SimpleCursor를 사용 안하고
cursor.moveToFirst();
한 후에 단순히 cursor.getString(cursor.getColumnIndex("NAME"))를 띄우면...
나옵니다... 그럼 테이블이 없는건 아닌건가요..? ㅠㅠ
일단 소스상에서의 로직을 봤을때 try , catch 로 묶어야되는 부분이 잇는데 안하셧고
logcat 을 보면 확실히 알수있겟지만
단순히 소스만 보면 cursor? 가 널이라면... -- 체크 필요하겟네요.
adapter 또한 null 일수도 잇겟네요.. 널체크 를 생활하하하고
logcat 을 보면 에러내용이 나오니 디버깅을 할 수 있겟죠.
에러는 프로그램을 아무리 잘하는사람도 나오는겁니다.. 그래서 디버깅이 필요한거고
디버깅 툴이 많이 나오는거죠.
저도 잘하진 못하지만.. 로그만은 확실히 볼려고 노력하면서 프로그램을 합니다.
정 안되시면 logcat 내용을 올려주세요.