Попробуйте опубликовать свой вывод logcat, и мы, вероятно, сможем помочь в дальнейшем, но на первый взгляд я вижу пару потенциальных проблем:
- Если столбец UsernName не существует,
getColumnIndex()
вернется-1, что вызовет проблемы с cur.getString()
- Если ваш запрос не вернет никаких результатов, оба параметра
cur.getString
и cur.getColumnIndex
завершатся неудачно
Я бы предложил вамобновите свой код до следующего вида:
public String searchRecord(String f) {
String user;
Cursor cur= db.query(DATABASE_TABLE,new String[] { UserName, Age, Sex,DOB} , UserName +" like 'sa%'" , null ,null ,null ,null , "5");
if ( cur.getCount() > 0 ) { // Only attempt to get the UserName if we actually got some results
cur.moveToFirst();
user = cur.getString ( cur.getColumnIndex ( UserName ) );
}
else { // If no results returned by the query, return a NULL string;
user = null;
}
return user;
}
Возможно, вы захотите использовать getColumnIndexOrThrow
вместо getColumnIndex
, поскольку это вызовет исключение и сделает ошибки, связанные с отсутствующими столбцами, более очевидными.
Другой вопрос: уверены ли вы, что UserName, Age, Sex и DOB - это переменные, или это фактическое имя столбца?Если они являются буквальным именем столбца, вместо этого следует использовать следующий запрос:
Cursor cur= db.query(DATABASE_TABLE,new String[] { "UserName", "Age", "Sex", "DOB" } , "UserName like 'sa%'" , null ,null ,null ,null , "5");
Если это так, вам также следует изменить свой getColumnIndex
вызов на:
cur.getColumnIndex ( "UserName" )