2014-02-18 118 views
0

时,我不断收到一个错误,当我发起一个活动,在一开始是空指针异常,但现在我不知道该错误是和它只是不工作了错误启动活动

的logcat:

02-18 13:15:28.885: D/dalvikvm(328): GC_EXTERNAL_ALLOC freed 50K, 53% free 2553K/5379K, external 2730K/3266K, paused 115ms 
02-18 13:15:29.762: D/dalvikvm(328): GC_EXTERNAL_ALLOC freed 1K, 53% free 2552K/5379K, external 6764K/8447K, paused 51ms 
02-18 13:15:45.312: D/dalvikvm(328): GC_EXTERNAL_ALLOC freed 11K, 52% free 2583K/5379K, external 8695K/10350K, paused 46ms 
02-18 13:15:45.582: D/AndroidRuntime(328): Shutting down VM 
02-18 13:15:45.582: W/dalvikvm(328): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
02-18 13:15:45.592: E/AndroidRuntime(328): FATAL EXCEPTION: main 
02-18 13:15:45.592: E/AndroidRuntime(328): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.connectfour/com.example.connectfour.ScoreActivity}: java.lang.NullPointerException 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.os.Looper.loop(Looper.java:123) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-18 13:15:45.592: E/AndroidRuntime(328): at java.lang.reflect.Method.invokeNative(Native Method) 
02-18 13:15:45.592: E/AndroidRuntime(328): at java.lang.reflect.Method.invoke(Method.java:507) 
02-18 13:15:45.592: E/AndroidRuntime(328): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-18 13:15:45.592: E/AndroidRuntime(328): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-18 13:15:45.592: E/AndroidRuntime(328): at dalvik.system.NativeStart.main(Native Method) 
02-18 13:15:45.592: E/AndroidRuntime(328): Caused by: java.lang.NullPointerException 
02-18 13:15:45.592: E/AndroidRuntime(328): at com.example.connectfour.Database.getScores(Database.java:57) 
02-18 13:15:45.592: E/AndroidRuntime(328): at com.example.connectfour.ScoreActivity$MyCursorAdapter.<init>(ScoreActivity.java:21) 
02-18 13:15:45.592: E/AndroidRuntime(328): at com.example.connectfour.ScoreActivity.onCreate(ScoreActivity.java:49) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-18 13:15:45.592: E/AndroidRuntime(328): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
02-18 13:15:45.592: E/AndroidRuntime(328): ... 11 more 
02-18 13:15:54.303: I/Process(328): Sending signal. PID: 328 SIG: 9 

代码

private static class DBHelper extends SQLiteOpenHelper { 

    public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE" + DATABASE_TABLE + " (" + 
       KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       KEY_NAME + " INTEGER);" 
       ); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 
    } 

} 
public Database(Context context) { 
    ourContext = context; 
} 

public Database open() { 
    ourHelper = new DBHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    ourHelper.close(); 
} 

public Cursor getScores() { 
    return ourDatabase.rawQuery("SELECT * FROM "+DATABASE_TABLE, null); //No Parameter 
} 
} 

代码分数活动:这是分数线活动21就是鲁能的事情是:

@SuppressWarnings("deprecation") 
    public MyCursorAdapter(Context context) { 
     super(context, new Database(context).getScores()); 
     scoreIdx = getCursor().getColumnIndex(Database.KEY_NAME); 
     // TODO Auto-generated constructor stub 
    } 
+1

post ScoreAvtivity line 21 – Raghunandan

+3

我对Database.java:57感兴趣:-) –

+0

您的数据库为空,这就是您遇到此错误的原因。你确定你在这里传递了正确的参数:'super(context,DATABASE_NAME,null,DATABASE_VERSION);' – nikis

回答

0

当你创建你的数据库类时,你仍然没有instanciated我们的数据库变量。

所以当你在做getScores时,你将会拥有一个NPE。

只要尝试打开()它之前。

+0

所以在getscores中添加open()?我仍然没有任何反应 – user3322960

0

您还没有初始化ourDatabase。首先通过呼叫open()来初始化它...

public MyCursorAdapter(Context context) { 
    super(context, new Database(context).open().getScores();); 
    scoreIdx = getCursor().getColumnIndex(Database.KEY_NAME); 
    // TODO Auto-generated constructor stub 
} 
+0

它仍然不起作用 – user3322960

0

试试这个。

public Database open() { 
    ourHelper = new DBHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    ourHelper.close(); 
} 

public Cursor getScores() { 
ourDatabase = open(); 
return ourDatabase.rawQuery("SELECT * FROM "+DATABASE_TABLE, null); //No Parameter 
close() ; 
} 

在这里,当你调用getScores,你分贝将被创建并分配给ourDatabase然后可以很容易地使用。让我知道这个是否奏效。

+0

还记得捕获由getScores()返回的光标。 –