尝试从SQLite读取时出现NullPointerException错误

时间:2013-01-24 23:45:19

标签: android database sqlite

我从教程中找到了这个源代码,但是当我运行它时崩溃了。

我的logcat:

01-25 00:26:30.898: E/AndroidRuntime(2762): FATAL EXCEPTION: main
01-25 00:26:30.898: E/AndroidRuntime(2762): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pinchtapzoom/com.pinchtapzoom.AssignmentTracker}: java.lang.NullPointerException
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.os.Looper.loop(Looper.java:137)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.ActivityThread.main(ActivityThread.java:4441)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at java.lang.reflect.Method.invokeNative(Native Method)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at java.lang.reflect.Method.invoke(Method.java:511)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at dalvik.system.NativeStart.main(Native Method)
01-25 00:26:30.898: E/AndroidRuntime(2762): Caused by: java.lang.NullPointerException
01-25 00:26:30.898: E/AndroidRuntime(2762):     at com.pinchtapzoom.AssignmentTracker.onCreate(AssignmentTracker.java:70)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.Activity.performCreate(Activity.java:4465)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-25 00:26:30.898: E/AndroidRuntime(2762):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
01-25 00:26:30.898: E/AndroidRuntime(2762):     ... 11 more

这是代码开始崩溃的地方:

//---retrieves all the records---

public Cursor getAllRecords() 
{
    db = DBHelper.getWritableDatabase();
     Cursor mCursor = db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
            KEY_DUEDATE, KEY_COURSE, KEY_NOTES}, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

public Cursor getAllRecords() { db = DBHelper.getWritableDatabase(); Cursor mCursor = db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_DUEDATE, KEY_COURSE, KEY_NOTES}, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; }

//---get all Records---

    db.open();
    Cursor c = db.getAllRecords();
    startManagingCursor(c);
    if (c.moveToFirst())
    {
        do {          
            DisplayRecord(c);
        } while (c.moveToNext());
    }
    db.close();

以下是AssignmentTracker.java的代码:

    db.open();
    Cursor c = db.getAllRecords();
    startManagingCursor(c);
    if (c.moveToFirst())
    {
        do {          
            DisplayRecord(c);
        } while (c.moveToNext());
    }
    db.close();

以下是DBAdapter.java的代码:

教程为: here

当我取消注释代码时它停止工作。 关于这个问题有很多问题,但没有明确的解决方案。 我刚开始学习SQLite,所以需要一些帮助来找到解决方案。

提前致谢

2 个答案:

答案 0 :(得分:1)

问题是您有两个名为DBAdapter类并且您使用了错误的类...
只需删除以:

开头的整个DBAdapter类
private class DBAdapter extends BaseAdapter {

AssignmentTracker中的DBAdapter无论如何都无效。

答案 1 :(得分:0)

logcat会告诉你究竟什么行导致异常,但它可能是

Cursor mCursor = db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
        KEY_DUEDATE, KEY_COURSE, KEY_NOTES}, null, null, null, null, null);

因为您没有检查getWritableDatabase()是否返回了数据库而非null,或

if (c.moveToFirst())

因为您没有检查db.getAllRecords();是否返回了游标而不是null。

相关问题