我从教程中找到了这个源代码,但是当我运行它时崩溃了。
我的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,所以需要一些帮助来找到解决方案。
提前致谢
答案 0 :(得分:1)
问题是您有两个名为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。