1

基本的に、データベースに挿入し、以下のメソッドを使用してすべての結果を表示でき、ListViewに表示されるSimpleCursorAdapterは完全に正常に機能します。

// 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(long id)がAsyncTaskで実行されていることです。参照するIDは、OnItemClickListenersonItemClickメソッドのIDです。

どんな助けでも大歓迎です、私の頭は真っ直ぐになりました!

乾杯!

4

2 に答える 2

4

moveToFirst()を実行する必要があります。このメソッドは、カーソルの現在の行ポインターがすでに最初の行に設定されており、getString(index)が最初の行のCOLUMN_JSONの値を返すことを前提としています。

これは真実ではありません。クエリが何かを返したと思い込まないでください。selection句が行を返さなかった場合、cursor.getCount()は0を返します。さらに、クエリはSQLite例外をスローする場合があります。クエリの結果を見るときはいつでも、コードをで囲む必要があります

試す {

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

    // some operation

}
...

} catch(例外e){

}

于 2012-12-19T21:40:54.907 に答える
1

nullになる可能性のある唯一の参照がssDatabaseであるとすると、カーソルが割り当てられ、idが単純に長いため、一般的なSqlliteHelperパターンを使用していると仮定すると、前にopen()を呼び出すのを忘れている可能性があります。呼び出し

getJSONstring

于 2012-12-19T21:36:45.053 に答える