我使用它来填充数据库中的某些字段。
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)));
如何摆脱或防御此错误。
答案 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);