Я создаю приложение для Android с Eclipse и пытаюсь использовать Cursor для запроса базы данных SQLite. Я не могу понять, что вызывает сбой этого курсора:

public List<Word> getAllWords() {
    List<Word> words = new ArrayList<Word>(); 

    Cursor cursor = db.query(TABLE_NAME, new String[] {FIELD_PRIMARY_DEFINITION}, null, null, null, null, null);
    cursor.close();

    return words;
}

Когда я запускаю этот код, мой эмулятор Android сообщает, что программа остановлена. Когда я закомментировал строку курсора, она работает нормально. База данных существует, таблица существует, TABLE_NAME содержит правильное имя таблицы, а FIELD_PRIMARY_DEFINITION содержит имя столбца. Что мне не хватает, что может привести к сбою?

Спасибо.

Я не знаком с Logcat, я новичок в разработке Android. Но я применил фильтр к имени своего приложения, и вот что он показывает:

02-18 22:26:08.447: I/jdwp(20692): Ignoring second debugger -- accepting and dropping
02-18 22:26:15.107: W/Trace(20989): Unexpected value from nativeGetEnabledTags: 0
02-18 22:26:15.148: W/Trace(20989): Unexpected value from nativeGetEnabledTags: 0
02-18 22:26:15.187: D/AndroidRuntime(20989): Shutting down VM
02-18 22:26:15.187: W/dalvikvm(20989): threadid=1: thread exiting with uncaught exception (group=0x40a70930)
02-18 22:26:15.247: E/AndroidRuntime(20989): FATAL EXCEPTION: main
02-18 22:26:15.247: E/AndroidRuntime(20989): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.source.wordCollector/com.source.wordCollector.MainActivity}: java.lang.NullPointerException
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.os.Looper.loop(Looper.java:137)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.ActivityThread.main(ActivityThread.java:5039)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at java.lang.reflect.Method.invokeNative(Native Method)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at java.lang.reflect.Method.invoke(Method.java:511)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at dalvik.system.NativeStart.main(Native Method)
02-18 22:26:15.247: E/AndroidRuntime(20989): Caused by: java.lang.NullPointerException
02-18 22:26:15.247: E/AndroidRuntime(20989):    at com.source.dal.WordDAO.getAllWords(WordDAO.java:75)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at com.source.wordCollector.MainActivity.onCreate(MainActivity.java:23)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.Activity.performCreate(Activity.java:5104)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
02-18 22:26:15.247: E/AndroidRuntime(20989):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
0
user2084934 19 Фев 2013 в 02:08
Добавьте сюда logcat, пожалуйста.
 – 
Simon Dorociak
19 Фев 2013 в 02:12
Вы инициализировали db?
 – 
FoamyGuy
19 Фев 2013 в 02:20
Я совершенно уверен, что ему не хватает места в своем операторе CREATE TABLE, и имя столбца перепуталось.
 – 
Raghav Sood
19 Фев 2013 в 02:21
Попробуйте просто запустить вместо отладки. Кажется, ваше исключение не регистрируется, потому что ваше приложение ожидает отладчика.
 – 
Raghav Sood
19 Фев 2013 в 02:24

1 ответ

Лучший ответ

Попробуйте зарегистрировать и проверить динамический запрос, который вы пишете, и убедиться, что нет синтаксической ошибки. В большинстве случаев это, вероятно, приведет к сбою курсора Android.

Также убедитесь, что соединение с базой данных открыто. Предлагаю вам взглянуть на эту статью:

www.vogella.com/articles/AndroidSQLite/article.html

0
test 19 Фев 2013 в 02:33
1
Ах, черт, моя база данных не была открыта. Вы справились, спасибо. Я слишком внимательно смотрел на этот фрагмент кода, а не на проблему с общей картиной.
 – 
user2084934
19 Фев 2013 в 02:36
Без проблем, мой друг. Также не забудьте закрыть соединение после того, как вы закончите его использовать, но после того, как сделаете необходимые запросы!
 – 
test
19 Фев 2013 в 16:54