2011-10-17 14 views
0

私はこれを使用して、データベースからいくつかのフィールドを設定しています。アクティビティが一時停止された場合アクティビティを再開するときのindexOutOfBounds

private void populateField() { 

if(mRowId != null){ 

    Cursor Message = mDbHelper.fetchScheduledTask(mRowId); 
    startManagingCursor(Message); 
    Log.e("ROWID", mRowId.toString()); 
    String commaText = (Message.getString(Message.getColumnIndexOrThrow(SmsDbAdapter.KEY_NUMBERS))); 
    numbers.setText(commaText); 

は、その後私はそれがコード行を指すエラー

10-17 11:15:13.123: ERROR/AndroidRuntime(15432): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

を取得再開しました。

String commaText = (Message.getString(TextMessage.getColumnIndexOrThrow(SmsDbAdapter.KEY_NUMBERS))); 

このエラーを取り除くにはどうすればよいですか?

答えて

3

カーソルを使用する前に、カーソルが空であるかどうかを確認する必要があります。

if (Message.moveToFirst()) { 
    String commaText = (Message.getString(Message.getColumnIndexOrThrow(SmsDbAdapter.KEY_NUMBERS))); 
    numbers.setText(commaText); 
    // Whatever else you want to do with the cursor 
} 

moveToFirst()は、カーソルに項目がない場合はfalseを返します。

+0

固定小さなタイプミスを提案! - あなたは 'は'(Message.moveToFirst()をチェックし、 )...削除! ...カーソルが最初の位置に移動できる場合は、有効な行があります。 – SBerg413

+0

編集していただきありがとうございます。 – goto10

1
private void populateField() { 

    if(mRowId != null){ 

     Cursor Message = mDbHelper.fetchScheduledTask(mRowId); 
     try{ 
      if(Message != null && Message.moveToNext()){ 
       startManagingCursor(Message); 
       Log.e("ROWID", mRowId.toString()); 
       String commaText = Message.getString(Message.getColumnIndexOrThrow(SmsDbAdapter.KEY_NUMBERS))); 
       numbers.setText(commaText); 
      } 
     }finally{ 
      if(Message != null){ 
       try{ 
        Message.close(); 
       } catch(Exception e){} 
      } 
     } 
    } 
} 
+0

あなたがしたい場合は最後にキャッチをスローすることもできます:) –

1

あなたはcoder_for_lifeのようなIFSをテストするために好きではない場合try/catchブロックを使用し

private void populateField() { 

if(mRowId != null){ 
    Cursor Message = mDbHelper.fetchScheduledTask(mRowId); 
    startManagingCursor(Message); 
    Log.e("ROWID", mRowId.toString()); 
    try{ 
     String commaText = (Message.getString(Message.getColumnIndexOrThrow(SmsDbAdapter.KEY_NUMBERS))); 
    }catch (CursorIndexOutOfBoundsException e){ 
     //do something to handle the error 
    } 
    numbers.setText(commaText); 
関連する問題