indexOutOfBounds恢复活动时

时间:2011-10-17 15:18:18

标签: android

我使用它来填充数据库中的某些字段。

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 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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){}
            }
        }
    }
}

答案 2 :(得分: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);