2012-04-20 10 views
37

私は、データベースアダプタのメソッドにidを渡したが、特定の電話番号を表示するために、リストビューのデータを表示するためにカーソルアダプタを拡張するカスタムアダプタを使用していますいずれかがそれを解決するために私を助けることができるラインandroid.database.CursorIndexOutOfBoundsException:0のサイズでインデックス0が要求されました

num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 

後に行っていない方法で、デバッガを配置しながら

errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

を示しています。 は、このコードされています。あなたはカーソルから何かを読み取ろう前に

public String getNumberFromId(int id) 
{ 
    String num; 
    db= this.getReadableDatabase(); 
    Cursor cursor = db.query(scheduletable, new String[] { "ContactNumber" },"_id="+id, null, null, null, null); 
    cursor.moveToFirst(); 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
    cursor.close(); 
    db.close(); 
    return num; 
} 

答えて

7

は、moveToFirst()からの戻り値をチェックしてください。返される結果がないかのように見えます。

15

あなたはカーソルを扱っているときはいつでも、常にnullをチェックし、必ずmoveToFirst()をチェック。

if(cursor != null && cursor.moveToFirst()){ 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
    cursor.close(); 
} 
+0

このコードは私のために働いています。 –

+2

カーソルがnullの場合、このコードはcursor.close()でクラッシュします。 – Mark

+0

'if(cursor.getCount()!= 0)'をチェックするのも同じですか? –

91

..カーソルが空の場合、これがスローされる例外を避けることができます。これを試してみてください

if(cursor != null && cursor.moveToFirst()){ 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
    cursor.close(); 
} 

場所は、それがnullまたは空のカーソルを返しているかどうかを適切に記録します。それによると、あなたのクエリを確認します。

更新以下のコメントにJonが述べたように、両方のチェックを1つのステートメントに入れます。

更新2close()コールを有効なカーソルスコープ内に配置します。

代わりの"ContactNumber"試みを検索:

+2

Javaの '&&'の評価が遅いため、 'if(cursor!= null && cursor.moveToFirst()){...}' –

+1

これを指摘してくれてありがとう。それを更新しました:) – Shubhayu

+0

ありがとう@Shubhayuそれは私の問題を解決しました。 – indraja

4

Cursor Sを照会するスキーマを保存するには、

// just one 
Cursor cursor = db.query(...); 
if (cursor != null) { 
    if (cursor.moveToFirst()) { 
     value = cursor.getSomething(); 
    } 
    cursor.close(); 
} 

// multiple columns 
Cursor cursor = db.query(...); 
if (cursor != null) { 
    while (cursor.moveToNext()) { 
     values.add(cursor.getSomething()); 
    } 
    cursor.close(); 
} 
10

まず人々はまだ探している場合は、データ

if(cursor!=null && cursor.getCount()>0){ 
    cursor.moveToFirst(); 
    num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 
} 
関連する問題