контекст: я могу получить записи с помощью других методов, таких как public Cursor getEntry(long rowId)
и public Cursor getEntry(String category)
, но по какой-то причине public Cursor getAllEntries()
не работает. Я получаю ошибку Cursor - Invalid statement in fillWindow()
android.database.sqlite.SQLiteDatabase - невозможно получить все записи из базы данных
код:
//---retrieves all entries---
public Cursor getAllEntries() throws SQLException
{
Log.d(BudgetConstants.DEBUG_TAG, "DBAdapter - DatabaseHelper - getAllEntries();");
return db.query(DATABASE_TABLE,
new String[] {
KEY_ROWID,
KEY_TYPE,
KEY_DATE,
KEY_CATEGORY,
KEY_AMOUNT},
null, null, null, null, null);
}
полный код:
ListActivity (откуда я звоню дб) - http://pastebin.com/UGSvhsfd
DBAdapter (мой интерфейс к БД) - http://pastebin.com/jqtLiPHB
DBAdapter (мои друзья DBAdapter, который работает, как это должно быть) - http://pastebin.com/QTRF958d
EDIT1: код, где называется дб:
private void updateGUI(int displayScope) {
Cursor c;
ArrayList<Entry> entries; // NOTE: making an Entry ArrayList due to the fact that rows in Cursors cannot be deleted
switch(displayScope) {
case BudgetConstants.DISPLAY_ALL:
c = getAllTransactions();
//boolean b = c.moveToFirst();
//Log.d(BudgetConstants.DEBUG_TAG, "movetofirst: "+b);
entries = extractEntries(c, BudgetConstants.FILTER_LIMIT_ALL);
displayEntries(entries);
break;
case BudgetConstants.DISPLAY_MONTH:
c = getAllTransactions();
entries = extractEntries(c, BudgetConstants.FILTER_LIMIT_MONTH);
displayEntries(entries);
break;
}
}
private ArrayList<Entry> extractEntries(Cursor c, int filter) {
ArrayList<Entry> res = new ArrayList<Entry>();
Calendar cal = Calendar.getInstance();
int currMonth = cal.get(Calendar.MONTH)+1;
int currYear = cal.get(Calendar.YEAR);
if (c.moveToFirst()) { // <------ getting an error here: Cursor - Invalid statement in fillWindow()
do {
if (filter==BudgetConstants.FILTER_LIMIT_MONTH) {
String entryDate = c.getString(BudgetConstants.DB_DATE);
int entryMonth = getMonth(entryDate);
int entryYear = getYear(entryDate);
if (!((entryMonth==currMonth) && (entryYear==currYear)))
continue;
} else if (filter==BudgetConstants.FILTER_LIMIT_ALL)
res.add(new Entry(c.getString(BudgetConstants.DB_DATE), c.getString(BudgetConstants.DB_TYPE), c.getString(BudgetConstants.DB_AMOUNT)));
} while (c.moveToNext());
}
return res;
}