尝试运行我的应用程序时,我得到的错误,我无法弄清楚出了什么问题。我得到一个光标超出绑定异常。
堆栈追踪:
02-26 12:33:56.870: D/AndroidRuntime(1012): Shutting down VM
02-26 12:33:56.870: W/dalvikvm(1012): threadid=1: thread exiting with uncaught exception (group=0x41452930)
02-26 12:33:56.870: E/AndroidRuntime(1012): FATAL EXCEPTION: main
02-26 12:33:56.870: E/AndroidRuntime(1012): java.lang.RuntimeException: Unable to create application com.example.myassistantcoach.AnotherHelper: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
这是我的代码
private void readBowlingScoresFromDB() {
// TODO Auto-generated method stub
allBowlingScores = new ArrayList<BowlingScores>();
Cursor bowlingScoresCursor;
bowlingScoresCursor = bowlingScoresDB.query(BOWLING_SCORES_TABLE,
new String[] { RECORD_ID, DATE, GAME1, GAME2, GAME3 }, null,
null, null, null, DATE);
bowlingScoresCursor.moveToFirst();
BowlingScores tempBS;
if (!bowlingScoresCursor.isAfterLast()) {
do {
long id = bowlingScoresCursor.getLong(0);
long dateEpoch = bowlingScoresCursor.getLong(1);
int game1 = bowlingScoresCursor.getInt(2);
int game2 = bowlingScoresCursor.getInt(3);
int game3 = bowlingScoresCursor.getInt(4);
tempBS = new BowlingScores(id, dateEpoch, game1, game2, game3);
allBowlingScores.add(tempBS);
} while (bowlingScoresCursor.moveToNext());
bowlingScoresCursor.close();
}
}
public void addBowlingScores(BowlingScores bowlingScores) {
assert bowlingScores != null;
ContentValues cv = new ContentValues();
cv.put(BowlingScoresDatabaseHelper.DATE, bowlingScores.getDateEpoch()); // USE
// EPOCH
cv.put(BowlingScoresDatabaseHelper.GAME1, bowlingScores.getGame1());
cv.put(BowlingScoresDatabaseHelper.GAME2, bowlingScores.getGame2());
cv.put(BowlingScoresDatabaseHelper.GAME3, bowlingScores.getGame3());
Log.d("Bowling Database", "Before Inserting a record" + bowlingScores);
long idPassedBack = bowlingScoresDB.insert(
BowlingScoresDatabaseHelper.BOWLING_SCORES_TABLE, null, cv);
bowlingScores.setId(idPassedBack);
allBowlingScores.add(bowlingScores);
}
答案 0 :(得分:0)
第一次通过readBowlingScoresFromDB()时,光标为空。我强烈建议使用for循环而不是使用if语句的do-while循环。这应该保持第一次迭代不运行代码,并在光标为空时跳过它。
for (bowlingScoresCursor.moveToFirst(); !bowlingScoresCursor.isAfterLast(); bowlingScoresCursor.moveToNext()) {
long id = bowlingScoresCursor.getLong(0);
long dateEpoch = bowlingScoresCursor.getLong(1);
int game1 = bowlingScoresCursor.getInt(2);
int game2 = bowlingScoresCursor.getInt(3);
int game3 = bowlingScoresCursor.getInt(4);
tempBS = new BowlingScores(id, dateEpoch, game1, game2, game3);
allBowlingScores.add(tempBS);
}
bowlingScoresCursor.close();