2012-12-19 34 views
1

基本上,我可以插入到我的數據庫中,並使用下面的方法和顯示ListView的SimpleCursorAdapter查看所有結果 - 完全正常。Android SQLite - 嘗試訪問單行但可以訪問整個數據時的NullPointerException?

// Returns a Cursor containing all JSON strings 
public Cursor getAllJSONstrings() 
{  
    // Return all JSONstrings ordered by COLUMN_ID 
    return ssDatabase.query(TABLE_ROUTINES, new String[] {COLUMN_ROWID, COLUMN_JSON}, null, null, null, null, COLUMN_ROWID);   
} 

但是,以下方法給出無外乎我每次查詢的時間NullPointerException

的ID logcat的標籤顯示標籤爲它應該是什麼,1等

// Return one JSONstring in String form 
public String getJSONstring(long id) 
{ 
    Log.i(TAG, "getJSONstringStart... id=" + id); 

    Cursor cursor; 

    Log.i(TAG, "Cursor defined"); 

    /****** NullPointerException LINE ******/ 
    cursor = ssDatabase.query(TABLE_ROUTINES, null, "_id=" + id, null, null, null, null); 

    Log.i(TAG, "Exceed Cursor"); 

    int index = cursor.getColumnIndex(COLUMN_JSON); 

    Log.i(TAG, "index=" + index); 

    return cursor.getString(index); 
} 

對於它的價值,這種方法getJSONString(長ID)是被在的AsyncTask執行的第一項。它引用的id是OnItemClickListeners onItemClick方法中的id。

任何幫助將非常感激,我的頭走了!

乾杯!

+0

如果發生異常時有比你可能想檢查'ssDatabase'爲'null'。 – Luksprog

+0

你可以添加logcat /告訴我們哪一行是NPE? – fedepaol

+3

我可能會離開,但是你不應該在光標上做某種'moveToFirst()'或某物? – daniel

回答

4

之前,您需要做的moveToFirst()。你的方法假設遊標的當前行指針已經設置爲第一行,getString(index)將返回第一行的COLUMN_JSON的值。

這是不正確的。你絕不應該假設你的查詢返回了一些東西。如果selection子句沒有返回任何行,則cursor.getCount()將返回0.此外,查詢可能會拋出SQLite異常。你看一個查詢結果的任何時候,你應該附上你的代碼

嘗試{

// query 
if ((cursor != null) && (cursor.getCount() > 0)) { 

    // some operation 

} 
... 

}趕上(例外五){

}

+0

謝謝!你是一個優秀的人! – mgibson

1

考慮到唯一可能的引用爲null是ssDatabase,因爲光標只是被分配的,並且id是一個普通的長整數,並且假定您使用的是常見的SqlliteHelper模式,我猜測您可能忘記了調用open()的調用

getJSONstring

+0

乾杯,事實證明我沒有忘記:P然後我必須改變我的光標,感謝您的輸入,雖然! – mgibson

相關問題